2016-09-14 2 views
1

私は0と3の間の数字をランダムに与えて、それらを配列に書き込みます。Arduinoが私に間違った数字を教えてくれる

コードは、特定の時間だけ、その数字の後に同じことができます。たとえば、2回前に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;  
} 

答えて

0
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() {} 
+0

を 'randomSeed(analogRead(A0))は、' OKかどうか議論しないでください。) – datafiddler

+0

あなたのタスクはかなり*特定の*であるので、私はそれが作成する価値があるとは思いません配列サイズ、ランダム範囲、シーケンス数、またはこのサンプルが使用する暗黙的な設定の可変パラメータを持つ「汎用ソリューション」です。 – datafiddler

+0

ありがとうございました!まさに私が探したもの! – dessi

関連する問題