【问题标题】:Arduino gets me out wrong numbersArduino让我得到错误的数字
【发布时间】:2017-01-22 10:40:10
【问题描述】:

我做了一个小脚本,它给了我一个 0 到 3 之间的随机数并将它们写入一个数组。

代码应该使,只有特定的时间,数字可以是相同的。例如,如果之前有两次是 3,他必须取另一个数字……但逻辑上的事情似乎行不通?有人有想法吗? :/

int gameCount = 0;
int setupCount = 0;
long game[50];
int maxRepeat = 2;

void setup() {
  Serial.begin(9600);  

  for (int i = 0; i < 50; i++) {
    getNumber();
  }

  Serial.println("");
  for (int i = 0; i < 50; i++) {
    Serial.print(game[i]);
  }      
}

void loop() {
}

int getNumber() {  
  randomSeed(analogRead(A0));
  int number = random(1, 32)%4;

  if (setupCount < maxRepeat) {
    game[setupCount] = number;
    setupCount++;
  } else {

    int hits = 0;
    for (int i = setupCount; i < setupCount+maxRepeat; i++) {
      if (game[i] == number) {
        hits++;
      }
    }          

    if (hits == maxRepeat) {

      if (number == 0) {
        number = 1;
        Serial.println("It was a 0!!!");
      }

       else if (number == 1) {
        number = 2;
        Serial.println("It was a 1!!!");
      }

       else if (number == 2) {
        number = 3;
        Serial.println("It was a 2!!!");
      }

      else if (number == 3) {
        number = 0;
        Serial.println("It was a 3!!!");
      }           
    }

    game[setupCount] = number;
    setupCount++;        
  }

  return number;     
}

【问题讨论】:

    标签: arrays if-statement arduino logical-operators


    【解决方案1】:
    byte game[50]; // 50 values 0 .. 3, but never 3 identical numbers in sequence
    void setup() {
      randomSeed(analogRead(A0));
      byte prev = 99;
      byte pprev = 99;
      for (int i = 0; i < 50; i++) {
        byte candidate = random(4);  // a random value 0..3
        if (candidate != prev || prev != pprev) {
          game[i] = candidate;
          pprev = prev;
          prev = candidate;
        }
      }
    }
    
    void loop() {}
    

    【讨论】:

    • 请不要讨论randomSeed(analogRead(A0)) 是否可以;)
    • 由于您的任务非常具体,我认为不值得为数组大小、随机范围、序列计数等创建具有可变参数的“通用解决方案”此示例使用的隐式设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    相关资源
    最近更新 更多