123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- /*
- Arduino Spiel
- Autor: Johannes Tümler
- Letzte Änderung: 20.05.2022
- Zweck: Beleg 3 Hilfscode für einen leichteren Einstieg
- */
- enum Menu{
- MENU0,
- MENU1,
- MENU2,
- MENU3,
- MENU4,
- MENU5,
- MENU6,
- MENU7
- };
- const int red = 13, blue = 12, green = 11;
- int num=0;int num1=0;
- int currentOrder = 0;
- Menu menu = MENU0;
- const int startPin = 1;
- const int endPin = 9;
- const int maxAmount = 20;
- int numList[maxAmount];
- void setup()
- {
- pinMode(red, OUTPUT);
- pinMode(green, OUTPUT);
- pinMode(blue, OUTPUT);
- pinMode(10, INPUT_PULLUP);
- pinMode(9, INPUT_PULLUP);
- pinMode(8, INPUT_PULLUP);
- pinMode(7, INPUT_PULLUP);
- pinMode(6, INPUT_PULLUP);
- pinMode(5, INPUT_PULLUP);
- pinMode(4, INPUT_PULLUP);
- pinMode(3, INPUT_PULLUP);
- pinMode(2, INPUT_PULLUP);
- pinMode(1, INPUT_PULLUP);
- // Serial.begin(9600);
- resetAllPins();
-
- }
- void resetAllPins()
- {
- digitalWrite(red, LOW);
- digitalWrite(green, LOW);
- digitalWrite(blue, LOW);
- digitalWrite(1, HIGH);
- digitalWrite(2, HIGH);
- digitalWrite(3, HIGH);
- digitalWrite(4, HIGH);
- digitalWrite(5, HIGH);
- digitalWrite(6, HIGH);
- digitalWrite(7, HIGH);
- digitalWrite(8, HIGH);
- digitalWrite(9, HIGH);
- digitalWrite(10, HIGH);
- }
- void blink(const int *pin)
- {
- digitalWrite(*pin, HIGH);
- delay(500);
- digitalWrite(*pin, LOW);
- delay(500);
- }
- void loop()
- {
- switch(menu){
- case MENU0:
- // Serial.print("Menu 0\n");
- currentOrder = 0;
- for (int i=0; i<maxAmount; i++) {
- numList[i] = 0;
- }
- if (digitalRead(2) == LOW){
- menu=MENU2;
- digitalWrite(red, HIGH);
- digitalWrite(green, HIGH);
- digitalWrite(blue, HIGH);
- delay(1000);
- digitalWrite(red, LOW);
- digitalWrite(green, LOW);
- digitalWrite(blue, LOW);
- delay(500);
- }
- else if (digitalRead(3) == LOW){
- menu=MENU3;
- digitalWrite(red, HIGH);
- digitalWrite(green, HIGH);
- digitalWrite(blue, HIGH);
- delay(1000);
- digitalWrite(red, LOW);
- digitalWrite(green, LOW);
- digitalWrite(blue, LOW);
- delay(500);
- }
- else {
- blink(&red);
- blink(&red);
- blink(&red);
- blink(&green);
- blink(&green);
- }
- break;
- case MENU2:
- // Serial.print("Menu 2\n");
- digitalWrite(green, HIGH);
- for(int i=startPin;i<=endPin;i++){
- if (digitalRead(i) == LOW){
- numList[currentOrder]=i;
- currentOrder++;
- for(int k=0;k<maxAmount;k++){
- // Serial.print(numList[k]);
- // Serial.print(" ");
- }
- for (int a=0;a<i;a++)
- {blink(&green);}
- menu=MENU4;
- break;
- }
- }
- delay(1000);
- break;
- case MENU3:
- digitalWrite(green, HIGH);
- for(int i=1;i<10;i++){
- if (digitalRead(i) == LOW){
- num=i;menu=MENU5;
- for(int a=0;a<i;a++){
- blink(&green);
- }
- }
- }
- break;
- case MENU4:
- // Serial.print("Menu 4\n");
- bool oneNumberCorrect = true;
- bool allNumberCorrect = true;
- digitalWrite(blue, HIGH);
- for(int i=0;i<currentOrder;i++) {
- bool pinInserted = false;
- // Serial.print("Current position ");
- // Serial.print(i);
- // Serial.print("\n");
- while(true){
- for(int j=startPin;j<=endPin;j++){
- if(digitalRead(j) == LOW ){
- pinInserted = true;
- if(j != numList[i]){
- // Serial.print("The number is wrong\n");
- oneNumberCorrect = false;
- break;
- }
- // Serial.print("The number is correct\n");
- break;
- }
- }
- if(pinInserted) {
- break;
- }
- delay(1000);
- }
- allNumberCorrect = allNumberCorrect && oneNumberCorrect;
- if(!oneNumberCorrect){
- menu=MENU0;
- break;
- }
- delay(1000);
- }
- if(allNumberCorrect){
- menu=MENU2;
- }
- break;
- case MENU5:
- num1=random(1,9);
- for (int a=0;a<num1;a++){
- blink(&red);
- }
- menu=MENU6;
- break;
- case MENU6:
- digitalWrite(blue, HIGH);
- for(int i=startPin;i<=endPin;i++){
- if (digitalRead(i) == LOW){
- if (num==i){
- menu=MENU7;
- delay(1000);
- }
- }
- else {
- menu=MENU0;
- delay(1000);
- }
- }
- break;
- case MENU7:
- for(int i=startPin;i<=endPin;i++){
- if (digitalRead(i) == LOW){
- if (num1==i){
- menu=MENU3;
- delay(1000);
- }
- else{
- menu=MENU0;
- delay(1000);
- }
- }
- }
- break;
- default:
- break;
- }
- resetAllPins();
- }
|