Hallo zusammen!
Ich habe ein Problem:
Ich muss für die Schule einen mit einem Zahlenschloss gesicherten Tresor bauen und das Schloss mit dem arduino-Microcontroller programmieren. Den Code zum Öffnen des Tresors soll man über 4 Drucksensoren eingeben, wobei jeder Drucksensor für eine Zahl zwischen 1 und 4 steht. Wenn der erste Drucksensor gedrückt wird, soll die Variable W1 verändert werden, b soll um 1 erhöht werden und das Programm soll dadurch zu einer der if Schleifen, die b==2 als Bedingung haben, wechseln und so weiter, bis alle Werte mit einer Zahl belegt sind (insgesamt acht Stück). Soweit die Theorie. In der Praxis drückt man einen Sensor und der Arduino belegt gleich alle acht Werte mit der entsprechenden Zahl. Klar, denn sobald b um eins erhöht wird, erfüllt sich die Bedingung für die nächste if-Schleife, während immer noch der erste Sensor gedrückt ist, da niemand seine Hand so schnell wegnehmen kann, wie der Arduino rechnet. Hier mal ein Ausschnitt aus meinem Programm:
(Den Anfang und das Ende habe ich weggelassen, da nicht genügend Platz vorhanden ist, aber um diesen Teil geht es)
Wert1=analogRead(Sensor1);
Wert2=analogRead(Sensor2);
Wert3=analogRead(Sensor3);
Wert4=analogRead(Sensor4);
if(b==0&&Wert1<900) {
W1=1;
b++;
delay(500);
}
if(b==0&&Wert2<900) {
W1=2;
b++;
delay(500);
}
if(b==0&&Wert3<900) {
W1=3;
b++;
delay(500);
}
if(b==0&&Wert4<900) {
W1=4;
b++;
delay(500);
}
if(b==1&&Wert1<900) {
W2=1;
b++;
delay(500);
}
if(b==1&&Wert2<900) {
W2=2;
b++;
delay(500);
}
if(b==1&&Wert3<900) {
W2=3;
b++;
delay(500);
}
if(b==1&&Wert4<900) {
W2=4;
b++;
delay(500);
}
if(b==2&&Wert1<900) {
W3=1;
b++;
delay(500);
}
if(b==2&&Wert2<900) {
W3=2;
b++;
delay(500);
}
if(b==2&&Wert3<900) {
W3=3;
b++;
delay(500);
}
if(b==2&&Wert4<900) {
W3=4;
b++;
delay(500);
}
if(b==3&&Wert1<900) {
W4=1;
b++;
delay(500);
}
if(b==3&&Wert2<900) {
W4=2;
b++;
delay(500);
}
if(b==3&&Wert3<900) {
W4=3;
b++;
delay(500);
}
if(b==3&&Wert4<900) {
W4=4;
b++;
delay(500);
}
if(b==4&&Wert1<900) {
W5=1;
b++;
delay(500);
}
if(b==4&&Wert2<900) {
W5=2;
b++;
delay(500);
}
if(b==4&&Wert3<900) {
W5=3;
b++;
delay(500);
}
if(b==4&&Wert4<900) {
W5=4;
b++;
delay(500);
}
if(b==5&&Wert1<900) {
W6=1;
b++;
delay(500);
}
if(b==5&&Wert2<900) {
W6=2;
b++;
delay(500);
}
if(b==5&&Wert3<900) {
W6=3;
b++;
delay(500);
}
if(b==5&&Wert4<900) {
W6=4;
b++;
delay(500);
}
if(b==6&&Wert1<900) {
W7=1;
b++;
delay(500);
}
if(b==6&&Wert2<900) {
W7=2;
b++;
delay(500);
}
if(b==6&&Wert3<900) {
W7=3;
b++;
delay(500);
}
if(b==6&&Wert4<900) {
W7=4;
b++;
delay(500);
}
if(b==7&&Wert1<900) {
W8=1;
b++;
delay(500);
}
if(b==7&&Wert2<900) {
W8=2;
b++;
delay(500);
}
if(b==7&&Wert3<850) {
W8=3;
b++;
delay(500);
}
if(b==7&&Wert4<900) {
W8=4;
b++;
delay(500);
}
if(b==8) {
Serial.print(W1);
Serial.print(W2);
Serial.print(W3);
Serial.print(W4);
Serial.print(W5);
Serial.print(W6);
Serial.print(W7);
Serial.println(W8);
delay(500);
b-=8;
Serial.println(b);
}
Die Delays haben scheinbar überhaupt keine Wirkung. Ich bin mit meinem Latein am Ende, ich suche eine Möglichkeit, dass der Arduino b erst dann weiter vergrößert, wenn seit dem letzten Drücken alle Sensoren wieder auf Normalwert (1023) waren. Weiß jemand, wie ich das Programmieren könnte?
Vielen Dank schon mal im Voraus, eure verzweifelte Satschy