BELEG3.ino 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /*
  2. Arduino Spiel
  3. Autor: Johannes Tümler
  4. Letzte Änderung: 20.05.2022
  5. Zweck: Beleg 3 Hilfscode für einen leichteren Einstieg
  6. */
  7. unsigned char gesamtpunktzahl;
  8. const int red = 13, blue = 12, green = 11;
  9. int wahl;
  10. int eingabe[10];
  11. int rand(void);
  12. bool prufmode=false;
  13. bool gameover=false;
  14. void setup()
  15. {
  16. gesamtpunktzahl = 0;
  17. pinMode(red, OUTPUT);
  18. pinMode(green, OUTPUT);
  19. pinMode(blue, OUTPUT);
  20. pinMode(10, INPUT_PULLUP);
  21. pinMode(9, INPUT_PULLUP);
  22. pinMode(8, INPUT_PULLUP);
  23. pinMode(7, INPUT_PULLUP);
  24. pinMode(6, INPUT_PULLUP);
  25. pinMode(5, INPUT_PULLUP);
  26. pinMode(4, INPUT_PULLUP);
  27. pinMode(3, INPUT_PULLUP);
  28. pinMode(2, INPUT_PULLUP);
  29. pinMode(1, INPUT_PULLUP);
  30. resetAllPins();
  31. }
  32. void resetAllPins()
  33. {
  34. // alle Pins auf definierte Werte setzen (sonst wissen wir nicht, welchen Wert sie gerade haben.)
  35. digitalWrite(red, LOW);
  36. digitalWrite(green, LOW);
  37. digitalWrite(blue, LOW);
  38. // Alle nachfolgenden Pins werden auf HIGH gesetzt, sodass sie auf ein GND/Masse-Signal reagieren können.
  39. digitalWrite(1, HIGH);
  40. digitalWrite(2, HIGH);
  41. digitalWrite(3, HIGH);
  42. digitalWrite(4, HIGH);
  43. digitalWrite(5, HIGH);
  44. digitalWrite(6, HIGH);
  45. digitalWrite(7, HIGH);
  46. digitalWrite(8, HIGH);
  47. digitalWrite(9, HIGH);
  48. digitalWrite(10, HIGH);
  49. }
  50. void blink(const int *pin)
  51. {
  52. digitalWrite(*pin, HIGH);
  53. delay(500);
  54. digitalWrite(*pin, LOW);
  55. delay(500);
  56. }
  57. void loop()
  58. {
  59. wahl=menu();
  60. if(wahl==2)
  61. {
  62. game();}
  63. else if (wahl==3)
  64. {game();}
  65. resetAllPins();
  66. }
  67. int menu() //Erstellung des Menue
  68. {
  69. blink(&green); //Erscheinung der Leuchte
  70. blink(&green);
  71. blink(&red);
  72. blink(&red);
  73. blink(&red);
  74. if (digitalRead(2) == LOW)
  75. {
  76. for(int i=1;i<=2;i++)
  77. {digitalWrite(red, HIGH);digitalWrite(green, HIGH);digitalWrite(blue, HIGH);
  78. delay(500);
  79. digitalWrite(red, LOW);digitalWrite(green, LOW);digitalWrite(blue, LOW);
  80. delay(500);
  81. }
  82. return 2;
  83. }
  84. else if (digitalRead(3) == LOW)
  85. {
  86. for(int i=1;i<=3;i++)
  87. {digitalWrite(red, HIGH);digitalWrite(green, HIGH);digitalWrite(blue, HIGH);
  88. delay(500);
  89. digitalWrite(red, LOW);digitalWrite(green, LOW);digitalWrite(blue, LOW);
  90. delay(500);}
  91. return 3;
  92. }
  93. else
  94. {return 0;}
  95. }
  96. void game()
  97. { int j=0,k=0;
  98. for(;;){
  99. if(!prufmode)
  100. {
  101. digitalWrite(green, HIGH);
  102. for(int i=1;i<=10;i++)
  103. {if (digitalRead(i) == LOW)
  104. {
  105. for(int s=1;s<=i;s++){
  106. blink(&green);
  107. }
  108. eingabe[j]=i;
  109. blink(&green);
  110. prufmode=true;
  111. j++;k=0;
  112. digitalWrite(green, LOW);
  113. if(wahl==3){
  114. int a=rand()%10+1;
  115. eingabe[j]=a;
  116. j++;k=0;
  117. for(int i=1;i<=a;i++){
  118. blink(&red);}
  119. prufmode=true;
  120. }
  121. /*困难模式*/
  122. }
  123. }
  124. }
  125. else
  126. {digitalWrite(green, LOW);digitalWrite(blue, HIGH);
  127. for(int i=1;i<=10;i++)
  128. {if (digitalRead(i) == LOW)
  129. {
  130. if(eingabe[k]==i)
  131. {
  132. digitalWrite(blue, LOW);delay(500);digitalWrite(blue, HIGH);
  133. k++;
  134. }
  135. else
  136. {gameover=true;}
  137. }
  138. }
  139. if(k==j)
  140. prufmode=false;
  141. }
  142. if(gameover)
  143. { for(int i=1;i<=j;i++){
  144. digitalWrite(red, HIGH);digitalWrite(green, HIGH);digitalWrite(blue, HIGH);
  145. delay(500);
  146. digitalWrite(red, LOW);digitalWrite(green, LOW);digitalWrite(blue, LOW);
  147. delay(500);
  148. }
  149. for(int i=0;i>10;i++)
  150. {eingabe[i]=0;}gameover=false;prufmode=false;
  151. break;
  152. }
  153. resetAllPins();
  154. }
  155. }