arduino duemilanove: Problem mit Drucksensoren

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

also ich hab mir jetzt nicht jede der tausend verzweigungen angesehen, aber ich glaube du gehst das total falsch (kompliziert) an. Ein Programm, das so anfängt und dann nicht funktioniert, kann nichts werden (da spreche ich als prgrammierer).

Fassen wir erstmal zusammen was die Anforderungen sind:
4 Drucksensoren, 8-stellige Kombination, nach 8 Eingaben Auswertung Ja oder Nein.

Falls ich das richtig zusammengefasst habe, bietet sich folgende Lösung an:

Kombination = 8stelliges Array;
Eingabe = 8stelliges Array;
Zähler = zählt die tastendrücke: 0-8;

  1. Eingabearray = [0,0,0,0,0,0,0,0];
  2. Kombination = [4,2,1,3,1,1,2,3];
  3. Var. Tastendruck ist false;
  4. Taste wird gedrückt; Tastenwert geht hoch auf 1023; Var. Tastendruck auf true;
  5. Wenn Tastendruck ist true: Taste (1-4) in Zählerstelle in Eingabearray schreiben.
  6. Tastendruck wird wieder false, wenn taste wieder Wert = 0; Zähler um Eins erhöhen
  7. Eingabearray mit Kombinationsarray über eine schleife vergleichen.
  8. wenn beide gleich, true andernfall false zurückgeben.

Gruß
Marcus

EDIT: hab gerade gelesen, dass jeder Sensor ür eine zahl zwischen 1 und 4 stehen soll - ist aber auch kein Problem - da muss beim tastendruck nur der Wert / 256 genommen werden.

So ähnlich habe ich es schon mal versucht und es hat nicht funktioniert :frowning:
Naja, ich versuch es noch mal GENAU so, wie du es gesgt hast, vielleicht klappt es dann.
Vielen Dank auf jeden Fall :slight_smile: :slight_smile:
Satschy

Über den I2C-BUS fällt mir spontan der PCF8563 ein. Damit habe ich damals meine Monster-Uhr ( 224 LED-Einzel-LEDs ) angesteuert.

die Zeitabweichungen waren so ca. + 4 sec pro Tag ( je nach IC weicht das ab )

MfG

Über den I2C-BUS fällt mir spontan der PCF8563 ein. Damit habe ich damals meine Monster-Uhr ( 224 LED-Einzel-LEDs ) angesteuert.
die Zeitabweichungen waren so ca. + 4 sec pro Tag ( je nach IC weicht das ab )
MfG

ich glaub du bist im falschen Thread:

Hier würde deine Antwort besser passen:
http://arduino.cc/forum/index.php/topic,59241.0.html

Hier ist mal noch mein anderes Programm angehängt, das mit den Arrays, das auch nicht funktioniert. Weiß jemand, wieso? Also dass die clear array-Funktion für "ArrayDruck" noch fehlt weiß ich, aber was habe ich sonst noch falsch gemacht? So wie ich mich kenne, habe ich nämlich mal wieder total unlogisch gedacht^^
Danke schonmal

fertigesProgramm.pde (2.76 KB)