Wie programmiert man eine Stromstoßschaltung mit Arduino (5V Taster und LED)?
2 Antworten
Würde erst mal den Eingang auf INPUT_PULLUP setzen und den Taster gegen Masse schalten. Spart den Pulldownwiderstand. Dann abfragen, ob der Taster betätigt ist und entsprechend den Ausgang umschalten. Entweder mit "toggle" oder eben über einen Statusmerker. Also wenn "Eingang LOW" und "Merker ein", dann aus und andersrum. Dazu musst Du aber noch eine Flankenerkennung programmieren. Er muss also erkennen, das der Taster betätigt wurde. Im nächsten Zyklus würde er sonst wieder schalten. Das geht auch mit einem Merker, der den Tasterstatus speichert.
Was hast DU denn bis jetzt und wo genau klemmt es? Dann kann man darauf aufbauen. Wenn ich jetzt nur eine fertige Lösung poste, geht das zwar, aber willst es auch verstehen und selbst umsetzen können, oder?
Btw ist was her... Hatte in Erinnerung, dass es einen toggle-Befehl gibt... Ich hatte nur den Merker toggle genannt... ^^ Sorry dafür... Hab mal meinen Code rausgesucht, damit ich nicht alles neu schreiben muss... ^^ Hier heißt die Variable aber nicht mehr "toggle" sondern "state1" Poste es als Beispiel trotzdem mal...
int led1 = 9; // 1. LED
int led2 = 7; // 2. LED (für alternatives Beispiel)
int btn1 = 3; // Tastereingang
int btn1_state = LOW; // Variable für Tasterspeicherung
int btn1_last = HIGH; // Variable für Flankenauswertung
int state1 = LOW; // Variable für Status Ein/Aus LED1
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(btn1, INPUT_PULLUP);
}
void loop() {
// Es folg das Einlesen & speichern des Taster, die Flankenauswertung und umschalten
btn1_state = digitalRead(btn1); // einlesen des Taster und zwischenspeichern
if (btn1_state == LOW && btn1_last == HIGH) { //Prüfung auf Tasterveränderung
btn1_last = btn1_state; // nachführen der Tasterveränderung. Beim nächsten Zyklus ist die Bedingung der if damit nicht mehr erfüllt.
state1 = !state1; // setzt den Status durch ! immer entgegengesetzt des momentanen Zustandes
digitalWrite(led2, !digitalRead(led2)); // LED wird direkt angesteuert. ! setzt den Ausgang entgegen des eingelesenen aktuellen Zustand
}
if (btn1_state == HIGH) { // Prüfung auf losgelassenen Taster
btn1_last = btn1_state; // speichern des geänderten Tastersignals in Grundzustand
}
/* Ab hier beginnt die Ausgabe für led1 über die Variable state1.
* Die led1 hat dann immer den Zustand, wie die Variable auch...
* Dient der Übersicht, wenn man alle Ausgänge am Ende setzt,
* und zuvor nur mir Variablen als Zwischenmerker arbeitet.
* Vor allem setzt man dann einen Ausgang nicht versehentlich 2x,
* weil man ihn durch andere Zusammenhänge mit ansteuern möchte.
*/
digitalWrite(led1, state1); // Ausgang led1 wird der Status der Variable state1 zugewiesen
}
Danke 😊 Ich werde ihn bei Gelegenheit Mal ausprobieren.
Notfalls kann ich ja nochmal Fragen, wenn ich Abschnitte des Quellcodes nicht verstehe.
Hab den Code eben auf die schnelle noch was ausgedünnt und hoffe, es ist kein Fehler drin. Wurde zumindest Fehlerfrei übersetzt... ^^ Ist nicht final geprüft ;)
Hallo,
wie Rare schon schrieb würde ich den eingang erstmal entprellen..Und zusätzlich würde ich bei solchen tastern den flankenwechsel von Low auf High (nach dem Drücken den Taster loslassen) das Umschaltprogramm starten..
Der taster ist nur mit GND und dem Digital-Eingang vom ardu verbunden, im Setup Input_Pullup aktivieren..
Bin leider noch nicht so gut in Programmierung.
Ausgang umschalten? toggle Statusmerker?
Soweit war ich schon das ich eine Flankenerkennung programmieren muss, aber leider hat mein Code nicht funktioniert.