Was ist das Problem bei dem Programm?
Hi, ich und meine Freundin arbeiten an einem Projekt.Es wird Schießstand.
Wir arbeiten mit dem Arduino Uno , lichtempfindlichen Wiederständen und einer LED.
Das Ziel wäre, dass sobald ein lichtempfindlicher Wiederstand mit einem Laser abgeschossen wird die LED aufleuchtet. Wir haben drei unterschiedliche Lichtempfindliche Wiederstände. Egal ob 1 oder 3 abgeschossen wird, die LED soll angehen solang der Laser auf dem Sensor ist.
Mit dem Programm, dass wir bis jetzt haben, haben wir das Problem, dass es immer nur bei einem geht, also bei einem haben wir genau das was wir erreichen wollten , aber dann funktioniert es bei den anderen nicht. Spricht wenn 1 funktioniert gehen dafür 2 und 3 nicht. Ich hoffe ihr versteht was ich meine :D. Wenn ihr Fragen habt gerne stellen. Unten hab ich das Programm.
Danke
4 Antworten
Alle drei while-Schleifen sind Endlosschleifen. Wirf sie raus und schreibe stattdessen:
if (lichtl>800 || lichtm>800 || lichtr>800)
digitalWrite(13, HIGH); // mind. ein Sensor ist an
else
digitalWrite(13, LOW); // alle Sensoren sind aus
eher so rum
if (lichtl < 800 || lichtm < 800 || lichtr < 800)
digitalWrite(13, HIGH); // Mindestens ein Sensor ist getroffen
else
digitalWrite(13, LOW); // Kein Sensor ist getroffen
Grob gesagt könnte es daran liegen das ihr für jeden Sensor eine Schleife habt (Solange Licht an/Licht auf Sensor).
Problem dabei wäre solange das Licht an Sensor 1 an ist, lasse licht an und bleibe in der Schleife, solange er in dieser Schleife ist, kann er keine anderen sachen machen.
Macht am besten aus den Whiles einfach mal ein if und wenn dann der nächste Schleifendurchlauf kommt, wird die LED einfach wieder ausgeschaltet
Eure while Schleifen sind leider ziemlich unschön. Diese Schleifen halten das Programm in einem Zustand fest, solange die Bedingung wahr ist. Das bedeutet, wenn einer der Sensoren aktiviert wird (Lichtwert unter 800 fällt), tritt das Programm in die entsprechende while Schleife ein und bleibt dort, bis der Wert wieder über 800 steigt. Dadurch können andere Sensoren nicht überprüft werden.
Für euer Vorhaben würde ich definitiv If anstatt while schleifen verwenden.
Ihr könntet die Logik so anpassen, dass die LED leuchtet, wenn irgendein Sensor aktiviert wird. Dies könnt ihr erreichen, indem ihr eine Variable verwendet, die den Status der LED steuert und sie entsprechend den Werten der Sensoren aktualisiert.
So könnt ihr in keine Endlosschleife kommen. Wenn ihr hilfe beim code braucht sagt bescheid
Gruß EchoTech
kA aber ich schätze lichtl, lichtm, lichtr ändern sich innerhalb der jeweiligen Schleife ja nicht, d.h. sie müssten darin wiederholt abgefragt werden (analogRead). Vielleicht hilft das schon. Mehr hab ich jetzt nicht geschaut.