BELEG3.ino 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. /*
  2. Arduino Spiel
  3. Autor: Zhao Xue
  4. Letzte Änderung: 12.07.2022
  5. Zweck: Beleg 3
  6. */
  7. unsigned char gesamtpunktzahl;
  8. const int red = 13, blue = 12, green = 11;
  9. byte wahl; //Erstellung der Variante von den Modeauswahlen
  10. byte eingabe[10]; //Erstellung der Eingabe der Auswahlen
  11. bool prufmode=false;
  12. bool gameover=false;
  13. byte i;
  14. void setup()
  15. {
  16. gesamtpunktzahl = 0;
  17. pinMode(red, OUTPUT);
  18. pinMode(green, OUTPUT);
  19. pinMode(blue, OUTPUT);
  20. for(i=1;i<=10;i++){
  21. pinMode(i, INPUT_PULLUP);
  22. }
  23. resetAllPins();
  24. }
  25. void resetAllPins()
  26. {
  27. // alle Pins auf definierte Werte setzen (sonst wissen wir nicht, welchen Wert sie gerade haben.)
  28. digitalWrite(red, LOW);
  29. digitalWrite(green, LOW);
  30. digitalWrite(blue, LOW);
  31. // Alle nachfolgenden Pins werden auf HIGH gesetzt, sodass sie auf ein GND/Masse-Signal reagieren können.
  32. /* digitalWrite(1, HIGH);
  33. digitalWrite(2, HIGH);
  34. digitalWrite(3, HIGH);
  35. digitalWrite(4, HIGH);
  36. digitalWrite(5, HIGH);
  37. digitalWrite(6, HIGH);
  38. digitalWrite(7, HIGH);
  39. digitalWrite(8, HIGH);
  40. digitalWrite(9, HIGH);
  41. digitalWrite(10, HIGH);*/
  42. }
  43. void blink(const int *pin)
  44. {
  45. digitalWrite(*pin, HIGH);
  46. delay(500);
  47. digitalWrite(*pin, LOW);
  48. delay(500);
  49. }
  50. void loop() //Schleife der 2 Level
  51. {
  52. wahl=menu();
  53. if(wahl==2) //in einfache Mode Gehen
  54. {
  55. game();}
  56. else if (wahl==3) //in schwierige Mode Gehen
  57. {game();}
  58. resetAllPins();
  59. }
  60. void allblink(byte Mals) //Unterprogramm fur Blinken der Lichten
  61. {
  62. for(i=1;i<=Mals;i++)
  63. {
  64. digitalWrite(red, HIGH);digitalWrite(green, HIGH);digitalWrite(blue, HIGH);
  65. delay(500);
  66. digitalWrite(red, LOW);digitalWrite(green, LOW);digitalWrite(blue, LOW);
  67. delay(500);
  68. }
  69. }
  70. byte menu() //Code des Menus
  71. {
  72. blink(&green); //Erscheinung der Leuchte
  73. blink(&green);
  74. blink(&red);
  75. blink(&red);
  76. blink(&red);
  77. if (digitalRead(2) == LOW) //Erscheinung des einfachen Modemenu
  78. {
  79. for(i=1;i<=2;i++) //2 Mals blink
  80. {
  81. allblink(2);
  82. }
  83. return 2;
  84. }
  85. else if (digitalRead(3) == LOW) //Erscheinung des schwierigen Modemenu
  86. {
  87. for(i=1;i<=3;i++) //3 Mals blink
  88. {
  89. allblink(3);
  90. }
  91. return 3;
  92. }
  93. else
  94. {return 0;}
  95. }
  96. void game() //unterprogramm vom Spiel
  97. { int j=0,k=0;
  98. for(;;){ //Spielschleife
  99. if(!prufmode)
  100. {
  101. digitalWrite(green, HIGH);//Warten auf Eingabe
  102. for(i=1;i<=10;i++) //Schleife der Eingabe
  103. {if (digitalRead(i) == LOW)
  104. {
  105. for(byte s=1;s<=i;s++){ //Die eingegebene Zahl gibt an, wie oft das grune Licht blinkt.
  106. blink(&green);
  107. }
  108. eingabe[j]=i; //Die eingegebene Zahl wird in Liste gespeichert.
  109. blink(&green);
  110. prufmode=true; //um in Prufmode einzugehen
  111. j++;k=0;
  112. digitalWrite(green, LOW);
  113. if(wahl==3){ //schwierige Mode
  114. byte a=analogRead(0)%10+1; //Randzahl:1-10
  115. eingabe[j]=a; //Die Ranzahl wird in Liste gespeichert.
  116. j++;k=0;
  117. for(int i=1;i<=a;i++){
  118. blink(&red);} //Wie viel ist die Randzahl, wie oft das grune Licht blinkt.
  119. prufmode=true;
  120. }
  121. }
  122. }
  123. }
  124. else //prufen der Eingabe
  125. {digitalWrite(green, LOW);digitalWrite(blue, HIGH);
  126. for(i=1;i<=10;i++)
  127. {if (digitalRead(i) == LOW) //Prufzahl eigeben
  128. {
  129. if(eingabe[k]==i) //Die eingegebene Zahl wird in Liste gespeichert.
  130. {
  131. digitalWrite(blue, LOW);delay(500);digitalWrite(blue, HIGH);
  132. k++;
  133. }
  134. else
  135. {gameover=true;}
  136. }
  137. }
  138. if(k==j) //Prufzahl ist richtig
  139. prufmode=false; //um die neue Zahl einzugeben
  140. }
  141. if(gameover) //Gameover
  142. { for(i=1;i<=j;i++){
  143. allblink(j);
  144. }
  145. for(i=0;i>10;i++)
  146. {eingabe[i]=0;}gameover=false;prufmode=false; //reset
  147. break;
  148. }
  149. resetAllPins();
  150. }
  151. }