BELEG3.ino 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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)
  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. {/*digitalWrite(red, HIGH);digitalWrite(green, HIGH);digitalWrite(blue, HIGH);
  81. delay(500);
  82. digitalWrite(red, LOW);digitalWrite(green, LOW);digitalWrite(blue, LOW);
  83. delay(500);*/
  84. allblink(2);
  85. }
  86. return 2;
  87. }
  88. else if (digitalRead(3) == LOW) //Erscheinung des schwierigen Modemenu
  89. {
  90. for(i=1;i<=3;i++) //3 Mals blink
  91. {/*digitalWrite(red, HIGH);digitalWrite(green, HIGH);digitalWrite(blue, HIGH);
  92. delay(500);
  93. digitalWrite(red, LOW);digitalWrite(green, LOW);digitalWrite(blue, LOW);
  94. delay(500);*/
  95. allblink(3);
  96. }
  97. return 3;
  98. }
  99. else
  100. {return 0;}
  101. }
  102. void game() //unterprogramm vom Spiel
  103. { int j=0,k=0;
  104. for(;;){ //Spielschleife
  105. if(!prufmode)
  106. {
  107. digitalWrite(green, HIGH);//Warten auf Eingabe
  108. for(i=1;i<=10;i++) //Schleife der Eingabe
  109. {if (digitalRead(i) == LOW)
  110. {
  111. for(byte s=1;s<=i;s++){ //Die eingegebene Zahl gibt an, wie oft das grune Licht blinkt.
  112. blink(&green);
  113. }
  114. eingabe[j]=i; //Die eingegebene Zahl wird in Liste gespeichert.
  115. blink(&green);
  116. prufmode=true; //um in Prufmode einzugehen
  117. j++;k=0;
  118. digitalWrite(green, LOW);
  119. if(wahl==3){ //schwierige Mode
  120. byte a=analogRead(0)%10+1; //Randzahl:1-10
  121. eingabe[j]=a; //Die Ranzahl wird in Liste gespeichert.
  122. j++;k=0;
  123. for(int i=1;i<=a;i++){
  124. blink(&red);} //Wie viel ist die Randzahl, wie oft das grune Licht blinkt.
  125. prufmode=true;
  126. }
  127. }
  128. }
  129. }
  130. else //prufen der Eingabe
  131. {digitalWrite(green, LOW);digitalWrite(blue, HIGH);
  132. for(i=1;i<=10;i++)
  133. {if (digitalRead(i) == LOW) //Prufzahl eigeben
  134. {
  135. if(eingabe[k]==i) //Die eingegebene Zahl wird in Liste gespeichert.
  136. {
  137. digitalWrite(blue, LOW);delay(500);digitalWrite(blue, HIGH);
  138. k++;
  139. }
  140. else
  141. {gameover=true;}
  142. }
  143. }
  144. if(k==j) //Prufzahl ist richtig
  145. prufmode=false; //um die neue Zahl einzugeben
  146. }
  147. if(gameover) //Gameover
  148. { for(i=1;i<=j;i++){
  149. /*digitalWrite(red, HIGH);digitalWrite(green, HIGH);digitalWrite(blue, HIGH);
  150. delay(500);
  151. digitalWrite(red, LOW);digitalWrite(green, LOW);digitalWrite(blue, LOW);
  152. delay(500);*/
  153. allblink(j);
  154. }
  155. for(i=0;i>10;i++)
  156. {eingabe[i]=0;}gameover=false;prufmode=false; //reset
  157. break;
  158. }
  159. resetAllPins();
  160. }
  161. }