2016-09-14 4 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)가)'확인 여부 논의하지 마십시오, 당신의 작업은 꽤 * 특정 *이기 때문에) – datafiddler

+0

을, 나는 그것을 만들 가치가 있다고 생각하지 않습니다 무작위 범위, 시퀀스 카운트 또는이 샘플이 사용하는 암시 적 설정에 대한 변수 매개 변수가있는 "범용 솔루션". – datafiddler

+0

고마워요! 정확히 내가 뭘 찾았는지 !!! – dessi

관련 문제