beschäftige mich seit kurzen mit meinem neuen Genuino Uno. Habe einige C Kentnisse, jedoch komme ich momentan nicht weiter. Hoffe dass mir jemand helfen kann.
Mein Quellcode ist auch nicht sonderlich lange, zum Verständnis, wenn die rote LED Namens "LEDrot" mit HIGH angesteuert wird, soll mein Sounder "buzzer" solang piepsen, wie meine LED leuchtet.
Jedoch passiert gar nichts. Die LED´s leuchten wie im Quellcode nacheinander für je 150ms, jedoch ertönt der Sounder nicht, wenn "LEDrot = HIGH" ist. Hat jemand eine Idee, warum meine If-Bedingung nicht beachtet wird? Danke im voraus.
Da "int LEDrot = 2;" ist "LEDrot == HIGH" immer true.
Und da im Setup, wirds sowieso nur einmal gemacht.
Ich glaube, du versuchst eine Ablaufsteuerung zu bauen.
Dein LED Umschalter, sieht fast wie eine Schrittkette aus.
Ablaufsteuerung
Meine Standardantwort zu Ablaufsteuerungen:
Eine Stichworte Sammlung für Google Suchen:
Endlicher Automat,
State Machine,
Multitasking,
Coroutinen,
Ablaufsteuerung,
Schrittkette,
BlinkWithoutDelay,
setup wird nur einmalig ausgeführt. Deine Abfrage läuft ins leere.
Nur loop wird ständig durchlaufen.
wenn du mit delays arbeitest, mußte auch direkt hinter dem einschalten der roten LED auch den Buzzer einschalten und irgendwann wieder ausschalten. Und wenn dir die delay irgendwann lästig werden, verwende millis. Dann blockiert auch nichts und du kannst in der loop jederzeit Zustände abfragen und verarbeiten.
Diese wird nur einmal bearbeitet beim Starten des Arduino außerdem ist zu dem Zeitpunkt noch keine LEDrot HIGH. Die Abfrage muss in loop, außerdem würde ich dir raten das Blinken wie im Beispiel "Blink without delay" zu machen sonst wird deine Abfrage nur nach über ner Sekunde bearbeitet.
Anfangs war meine if/else-Bedingung im Loop, funktionierte auch nicht.
Anscheinend liegt es wirklich an den 'delays'.
Werde mich nochmal einlesen und es ohne diese probieren.
wenn ich mir das zusammen reime was du vielleicht im Besten Fall hattest, dann komme ich auf das hier.
Dabei habe ich in if/else noch den Pin 4 auf buzzer Pin korrigiert.
Davon ausgehend kann das nicht funktionieren wie gedacht. Weil du hast gar keine Variable die du auf HIGH vergleichen kannst.
Du hast nur den Pin 2 mit dem Namen LEDrot deklariert und initialisiert. Das heißt die Variable LEDrot hat den Wert 2. Und nur diesen Pin schaltest du direkt vorher mit digitalWrite ein. Das hat nichts damit zu tun das die Variable LEDrot den Wert "HIGH" bekommt. Diese bleibt bei 2. Sonst könntest du den Pin 2 mit LEDrot als Namen auch nie wieder ausschalten. Weil LOW ist 0 und HIGH ist 1.
Also wenn man solchen Unsinn schreiben würde ...
int LEDrot = HIGH;
welcher Pin würde dann mit digitalWrite geschalten?
Das ist alles ziemlicher Unsinn.
Was soll denn der Code tun.
LEDrot == HIGH ist erstmal immer False. Es sei denn das HIGH zufällig mit 2 definiert wäre.
Ich glaube du meinst
if (digitialRead(LEDrot) == HIGH) // ist equivalent zu if (digitalRead(LEDrot))
Ist semantisch aber immer noch Blödsinn weil du ja etwas testest was du doch genau weisst.
Nämlich das IO-Port 2 auf HIGH steht. Hast du ja eine Zeile vorher gemacht und da ist nichts
bedingtes dazwischen.
Was willst du eigentlich ?