|
@@ -0,0 +1,219 @@
|
|
|
+/*
|
|
|
+ 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();
|
|
|
+}
|