Advertisement
sandervspl

Arduino SIMON

Oct 12th, 2015
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.41 KB | None | 0 0
  1. int ledPinRed = 13;
  2. int ledPinBlue = 12;
  3. int ledPinGreen = 11;
  4. int ledPinYellow = 10;
  5.  
  6. int buttonRed = 9;
  7. int buttonBlue = 8;
  8. int buttonGreen = 7;
  9. int buttonYellow = 6;
  10. int buttonState = LOW;
  11. int prevButtonState = -1;  
  12.  
  13. int ledButtonDiff = ledPinRed - buttonRed;
  14.  
  15. int colorOrderID = 0;
  16. int colorOrder[100] = { };
  17.  
  18. bool isPlayerTurn = false;
  19. int playerOrder = 0;
  20.  
  21. unsigned long prevTime = 0;
  22.  
  23. void setup() {
  24.   Serial.begin(9600);
  25.  
  26.   pinMode(ledPinRed, OUTPUT);
  27.   pinMode(ledPinBlue, OUTPUT);
  28.   pinMode(ledPinGreen, OUTPUT);  
  29.   pinMode(ledPinYellow, OUTPUT);  
  30.  
  31.   pinMode(buttonRed, INPUT);
  32.   pinMode(buttonBlue, INPUT);
  33.   pinMode(buttonGreen, INPUT);
  34.   pinMode(buttonYellow, INPUT);
  35.      
  36.   //Let's make it more random
  37.   randomSeed(analogRead(A0));
  38. }
  39.  
  40.  
  41. void allLedsToggle(int state) {
  42.   for (int i = 10; i <= 13; i++) {
  43.     digitalWrite(i, state);
  44.   }
  45. }
  46.  
  47. void doColors() {
  48.   Serial.println("---");
  49.  
  50.   for (int i = 0; i <= colorOrderID; i++) {
  51.     digitalWrite(colorOrder[i], HIGH);
  52.     Serial.println(colorOrder[i]);
  53.     delay(750);
  54.     digitalWrite(colorOrder[i], LOW);
  55.     delay(500);
  56.   }
  57. }
  58.  
  59. void loop() {
  60.  
  61.   // computer laat zien wat de volgorde is
  62.   if (!isPlayerTurn) {
  63.     int randomColor = random(ledPinYellow, ledPinRed+1);
  64.     colorOrder[colorOrderID] = randomColor;
  65.    
  66.     doColors();
  67.    
  68.     colorOrderID++;
  69.     isPlayerTurn = true;
  70.    
  71.     // beurt van de speler
  72.   } else {
  73.     int buttonPressed = -1;
  74.     int buttonStateRed = digitalRead(buttonRed);
  75.     int buttonStateBlue = digitalRead(buttonBlue);
  76.     int buttonStateGreen = digitalRead(buttonGreen);
  77.     int buttonStateYellow = digitalRead(buttonYellow);
  78.    
  79.     // Dit zou 0 (LOW), 1 (HIGH) of meer moeten teruggeven.
  80.     // Als het meer dan 1 is (meerdere knoppen ingedrukt dus) dan negeren we het
  81.     buttonState = buttonStateRed + buttonStateBlue + buttonStateGreen + buttonStateYellow;
  82.    
  83.     // kijk of een knop is ingedrukt en welke
  84.     if (buttonState == HIGH && prevButtonState == LOW) {
  85.       if (buttonStateRed == HIGH) {
  86.         buttonPressed = buttonRed;
  87.       } else if (buttonStateBlue == HIGH) {
  88.         buttonPressed = buttonBlue;
  89.       } else if (buttonStateGreen == HIGH) {
  90.         buttonPressed = buttonGreen;
  91.       } else {
  92.         buttonPressed = buttonYellow;
  93.       }
  94.      
  95.       // als er een knop is ingedrukt controleren we hem
  96.       if (buttonPressed > -1) {
  97.         int buttonToPinID = buttonPressed + ledButtonDiff;
  98.        
  99.         if (buttonToPinID == colorOrder[playerOrder]) {
  100.           digitalWrite(buttonToPinID, HIGH);
  101.           delay(500);
  102.           digitalWrite(buttonToPinID, LOW);
  103.          
  104.           playerOrder++;
  105.          
  106.           // we hebben de ronde voltooid. Door naar de volgende ronde.
  107.           if (playerOrder == colorOrderID) {
  108.             Serial.println("Beurt is over. Volgende ronde!");
  109.            
  110.             isPlayerTurn = false;
  111.             playerOrder = 0;
  112.            
  113.             delay(1000);
  114.           }
  115.         } else {
  116.           // we zijn af. Nieuwe ronde!
  117.           Serial.println("FOUT! We beginnen opnieuw.");
  118.          
  119.           allLedsToggle(HIGH);
  120.           delay(1000);
  121.           allLedsToggle(LOW);
  122.          
  123.           isPlayerTurn = false;
  124.           playerOrder = 0;
  125.           colorOrderID = 0;
  126.          
  127.           delay(1000);
  128.         }
  129.       }
  130.     }
  131.   }
  132.  
  133.   prevButtonState = buttonState;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement