Hi... also erstmal danke für dieses Video, welches das typische Anfängerproblem mit der Tasterabfrage löst. Ich glaube jeder, der mit der Mikrocontroller-Programmierung anfängt, hat das Problem, dass ihm nicht klar ist, das eine Taster-Abfrage, die im 'void loop()' steht, mehrere tausendmal in der Sekunde stattfindet.Es wird also mehrere tausendmal pro Sekunde ein Tastendruck registriert. Soll ein Tasterklick nur als einmalig betätigt gezählt werden, darf die Auswertung nur zu diesem Zeitpunkt stattfinden, als der Taster noch nicht gedrückt war. Sobald also der Taster gedrückt wurde, darf bei weiteren durchläufen der 'void loop()' das Betätigen des Tasters nicht weiter gezählt werden. Somit wird ein langes Drücken auf einen Taster, als nur ein Klick registriert. Dies erreicht Du durch die IF-Abfrage: if(buttonstatus != letzterStatus) So weit... so gut... Aber danach machst Du es leider sehr umständlich und rechenintensiv. Du benutzt zwei IF-THEN-ELSE-Abfragen und berechnest noch ein Modulo. Das bläht den Maschinencode unnötig auf und braucht relativ viel Rechenleistung. Deshalb schreibe ich hier mal eine effizientere Möglichkeit auf, welche genau das gleiche macht. //Programmcode ANFANG Licht AN/AUS mit Taster byte LED_PIN = 9; // Variablentypen immer so klein wie möglich wählen, damit der Arbeits- byte BUTTON_PIN = 10; // speicher nicht so voll wird. Hier sogar besser: #DEFINE nutzen. bool buttonstatus = 0; // Da buttonstatus und letzterStatus nur die Zustände 0 und 1 annehmen bool letzterStatus = 0; // können, sollte der Variablentyp bool genutzt werdern. Das spart bool light = 0; // Arbeitsspeicher und kann bei Berechnungen gut genutzt werden. void setup() { pinMode(LED_PIN, OUTPUT); pinMode(BUTTON_PIN, INPUT); } void loop() { buttonstatus = digitalRead(BUTTON_PIN); if (buttonstatus != letzterStatus){ letzterStatus = !letzterStatus; light = light-buttonstatus; //Da bool als Variablentyp genutzt wird, kommt bei einen } //Unterlauf (unter 0) wieder eine 1 raus. digitalWrite(LED_PIN, light); } //Programmcode ENDE Ein Delay braucht man nur einbinden, falls man den Taster damit softwareseitig entprellen möchte. Dies erledigt bei Arduino-Schaltungen hardwareseitig aber auch ein 22pF-Kondensator parallel zum Schalter angeschlossen. Will man mit diesem Programmcode die Tasterklicks zählen, muss man nur den Variablentyp 'light' von 'bool' auf 'int' ändern und in der zeile 'light = light-buttonstatus' das Minus in ein Plus ändern. //Programmcode ANFANG Tasterklicks zählen byte LED_PIN = 9; // Variablentypen immer so klein wie möglich wählen, damit der Arbeits- byte BUTTON_PIN = 10; // speicher nicht so voll wird. Hier sogar besser: #DEFINE nutzen. bool buttonstatus = 0; // Da buttonstatus und letzterStatus nur die Zustände 0 und 1 annehmen bool letzterStatus = 0;// können, sollte der Variablentyp bool genutzt werdern. Das spart int zaehlen = 0; // Arbeitsspeicher und kann bei Berechnungen gut genutzt werden. void setup() { pinMode(LED_PIN, OUTPUT); pinMode(BUTTON_PIN, INPUT); } void loop() { buttonstatus = digitalRead(BUTTON_PIN); if (buttonstatus != letzterStatus){ letzterStatus = !letzterStatus; zaehlen = zaehlen+buttonstatus; //Tasterklicks werden gezählt } //Eigener Programmcode. Z.B. Ausgabe der Anzahl der Tasterklicks } //Programmcode ENDE Weiter so mit Deinen Videos. Daumen hoch!
hi hubert! dein code funktioniert so leider nicht. habe deinen code eins zu eins übernommen und musste feststellen, dass er ohne ein delay von mindestens einer millisekunde, nicht immer korrekt schaltet, da er möglicherweiße aufgrund des fehlenden delays zeilen überspringt. - aber mit delay erfüllt er die selben anforderungen im video. spitze, wenn alle so viel engagement zeigen!
Was heißt folgendes: letzterStatus = !letzterStatus; Heißt das dass letzterstaus jetzt nicht mehr den gleichen wert wie letzterstatus hat und somit auf 0 bzw 1 geändert wird, weil es bool ist?
Dein vid hat mit interessiert weil ich wissen wollte wie es andere machten. Vid hat mir gut gefallen. Ein Minus gibts da von meiner Seite doch noch. Die musi aber die musi muss nicht sein. Vielleicht liegt es am Alter, mir würde dein Dialog völlig reichen. In einer Vorlesung ist auch ruhe. Lg
Bei mir funktioniert es leider nicht und ich weiss nicht wieso kannst du mir helfen? Wenn ich deinen Code benutze passiert garnichts wenn ich meinen benutze den ich bei dir abgeschrieben habe anscheinend mit Fehlern leuchtet sie einmak heller und einmal nicht so hell wenn ich drücke
Hätte man Zeile 27-30 und 39-41 nicht auch weglassen können da er dann ja sowieso garnicht erst vor dem Konflikt stünde was er machen soll falls if nicht gegeben ist... Also die else wird ja nie angewendet vom arduino weil Beispielsweise wenn buttonstatus ungleich 1 ist dann wird eh nicht geschehen oder habe ich da etwas falsch verstanden🙈
Vielen Dank für das Video. Eine Frage habe ich, wenn der Arduino vom Strom genommen wird und dann wieder Strom bekommt, geht die LED gleich an. Was muss man machen damit Sie erstmal aus bleibt? Vielen Dank
Ja das ist möglich, es kommt demnächst auch ein Video dazu. Also wenn ich dich noch bis zum 08.08.2020 14:30 Uhr hinhalten kann würde ich mich sehr freuen wenn du dir da mein Video dazu anschaust :)
Ich möchte den Button parallel zu einem RC522 laufen lassen. Einzeln laufen beide Systeme schon, aber Leder noch nicht zusammen. Über nen Tipp wie ich das hinbekomme wäre ich echt dankbar.
Guten Tag Ich haben einen LCD und wollte diesen (wie die LED ansteuern) d.h wenn ich den Knopf einmal drücke soll das Display mit einem Text darauf angehen und wenn ich nochmal drücke wieder aus. An dem Display habe ich ein I2C dran. Könnte mir da wer helfen da ich nicht wirklich weiß wie ich das realisieren soll :D
Zusätzliche Hilfe gibt es NUR in der Community: linktr.ee/patrickhauswald
Hi...
also erstmal danke für dieses Video, welches das typische Anfängerproblem mit der Tasterabfrage löst. Ich glaube jeder, der mit der Mikrocontroller-Programmierung anfängt, hat das Problem, dass ihm nicht klar ist, das eine Taster-Abfrage, die im 'void loop()' steht, mehrere tausendmal in der Sekunde stattfindet.Es wird also mehrere tausendmal pro Sekunde ein Tastendruck registriert.
Soll ein Tasterklick nur als einmalig betätigt gezählt werden, darf die Auswertung nur zu diesem Zeitpunkt stattfinden, als der Taster noch nicht gedrückt war. Sobald also der Taster gedrückt wurde, darf bei weiteren durchläufen der 'void loop()' das Betätigen des Tasters nicht weiter gezählt werden. Somit wird ein langes Drücken auf einen Taster, als nur ein Klick registriert.
Dies erreicht Du durch die IF-Abfrage: if(buttonstatus != letzterStatus)
So weit... so gut...
Aber danach machst Du es leider sehr umständlich und rechenintensiv.
Du benutzt zwei IF-THEN-ELSE-Abfragen und berechnest noch ein Modulo.
Das bläht den Maschinencode unnötig auf und braucht relativ viel Rechenleistung.
Deshalb schreibe ich hier mal eine effizientere Möglichkeit auf, welche genau das gleiche macht.
//Programmcode ANFANG Licht AN/AUS mit Taster
byte LED_PIN = 9; // Variablentypen immer so klein wie möglich wählen, damit der Arbeits-
byte BUTTON_PIN = 10; // speicher nicht so voll wird. Hier sogar besser: #DEFINE nutzen.
bool buttonstatus = 0; // Da buttonstatus und letzterStatus nur die Zustände 0 und 1 annehmen
bool letzterStatus = 0; // können, sollte der Variablentyp bool genutzt werdern. Das spart
bool light = 0; // Arbeitsspeicher und kann bei Berechnungen gut genutzt werden.
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
}
void loop() {
buttonstatus = digitalRead(BUTTON_PIN);
if (buttonstatus != letzterStatus){
letzterStatus = !letzterStatus;
light = light-buttonstatus; //Da bool als Variablentyp genutzt wird, kommt bei einen
} //Unterlauf (unter 0) wieder eine 1 raus.
digitalWrite(LED_PIN, light);
}
//Programmcode ENDE
Ein Delay braucht man nur einbinden, falls man den Taster damit softwareseitig entprellen möchte.
Dies erledigt bei Arduino-Schaltungen hardwareseitig aber auch ein 22pF-Kondensator parallel zum Schalter angeschlossen.
Will man mit diesem Programmcode die Tasterklicks zählen, muss man nur den Variablentyp 'light' von 'bool' auf 'int' ändern und in der zeile 'light = light-buttonstatus' das Minus in ein Plus ändern.
//Programmcode ANFANG Tasterklicks zählen
byte LED_PIN = 9; // Variablentypen immer so klein wie möglich wählen, damit der Arbeits-
byte BUTTON_PIN = 10; // speicher nicht so voll wird. Hier sogar besser: #DEFINE nutzen.
bool buttonstatus = 0; // Da buttonstatus und letzterStatus nur die Zustände 0 und 1 annehmen
bool letzterStatus = 0;// können, sollte der Variablentyp bool genutzt werdern. Das spart
int zaehlen = 0; // Arbeitsspeicher und kann bei Berechnungen gut genutzt werden.
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
}
void loop() {
buttonstatus = digitalRead(BUTTON_PIN);
if (buttonstatus != letzterStatus){
letzterStatus = !letzterStatus;
zaehlen = zaehlen+buttonstatus; //Tasterklicks werden gezählt
}
//Eigener Programmcode. Z.B. Ausgabe der Anzahl der Tasterklicks
}
//Programmcode ENDE
Weiter so mit Deinen Videos.
Daumen hoch!
hi hubert! dein code funktioniert so leider nicht. habe deinen code eins zu eins übernommen und musste feststellen, dass er ohne ein delay von mindestens einer millisekunde, nicht immer korrekt schaltet, da er möglicherweiße aufgrund des fehlenden delays zeilen überspringt. - aber mit delay erfüllt er die selben anforderungen im video. spitze, wenn alle so viel engagement zeigen!
Was heißt folgendes: letzterStatus = !letzterStatus;
Heißt das dass letzterstaus jetzt nicht mehr den gleichen wert wie letzterstatus hat und somit auf 0 bzw 1 geändert wird, weil es bool ist?
danke vielmals für dieses wirklich gute Tutorial!!
Super Video ! Hat mir sehr geholfen
super toll erklärt mach weiter so brauchen solche Leute wie dich Danke.
Freut mich wenn es dir geholfen hat :)
Sehr hilfreiches Video . Ich wollte dieses Programm mit Led Matrix strip komponieren Aber ging nicht . Hat jemand Ahnung
sehr organisiertes turtorial! mega nice
Danke für die Erklärung 👍
Starke Erklärung, hat wirklich sehr geholfen
Dein vid hat mit interessiert weil ich wissen wollte wie es andere machten. Vid hat mir gut gefallen. Ein Minus gibts da von meiner Seite doch noch. Die musi aber die musi muss nicht sein. Vielleicht liegt es am Alter, mir würde dein Dialog völlig reichen. In einer Vorlesung ist auch ruhe. Lg
Bei mir funktioniert es leider nicht und ich weiss nicht wieso kannst du mir helfen? Wenn ich deinen Code benutze passiert garnichts wenn ich meinen benutze den ich bei dir abgeschrieben habe anscheinend mit Fehlern leuchtet sie einmak heller und einmal nicht so hell wenn ich drücke
Danke Brudi
Danke für das Video
Mega gutes Video!:)
Danke
Hätte man Zeile 27-30 und 39-41 nicht auch weglassen können da er dann ja sowieso garnicht erst vor dem Konflikt stünde was er machen soll falls if nicht gegeben ist... Also die else wird ja nie angewendet vom arduino weil Beispielsweise wenn buttonstatus ungleich 1 ist dann wird eh nicht geschehen oder habe ich da etwas falsch verstanden🙈
Vielen Dank für das Video. Eine Frage habe ich, wenn der Arduino vom Strom genommen wird und dann wieder Strom bekommt, geht die LED gleich an. Was muss man machen damit Sie erstmal aus bleibt? Vielen Dank
Hallo, super erklärt!!! Danke.
Gutes Video, vielen Dank
Wie mach ich das, dass die LED nur eine bestimmte Zeit angeht und dann von alleine aus. Wie ein Treppenhausrelais.
www.tinkercad.com/things/kGQhc6pTzYZ-arduino-3-leds-1-taster-einschalt-ausschaltverzogerung
Hallo,
Ist es möglich durch einen langen Tastendruck eine Led auszuschalten und durch einen kurzen Tastendruck einzuschalten.
Wenn Ja, wie?
Gruß Willi
Ja das ist möglich, es kommt demnächst auch ein Video dazu. Also wenn ich dich noch bis zum 08.08.2020 14:30 Uhr hinhalten kann würde ich mich sehr freuen wenn du dir da mein Video dazu anschaust :)
toll erklärt, top!
hat das eigentlich einen grund warum in dem code zum downloaden HIGH und LOW vertauscht sind im vergleich zum video?
Ich möchte den Button parallel zu einem RC522 laufen lassen. Einzeln laufen beide Systeme schon, aber Leder noch nicht zusammen.
Über nen Tipp wie ich das hinbekomme wäre ich echt dankbar.
Hi Könntest du vielleicht mal über meine Schaltung schauen und mir sagen ob sie so funktioniert? Ich würde sie dir schicken wenn es ok ist.
Mit einem Taster einfach... aber wie geht das mit 2 Tastern und 2 LEDs ???
Hab bis jetzt noch kein Tutorial gefunden😣
Gut das du fragst, am Samstag 14:30 Uhr kommt da von mir ein Video dazu :)
Guten Tag
Ich haben einen LCD und wollte diesen (wie die LED ansteuern) d.h wenn ich den Knopf einmal drücke soll das Display mit einem Text darauf angehen und wenn ich nochmal drücke wieder aus. An dem Display habe ich ein I2C dran. Könnte mir da wer helfen da ich nicht wirklich weiß wie ich das realisieren soll :D
Kann man auch 2 leds mit dem knopfdruck starten? wenn ja wie ?
Wie heißt das letzte Lied von dem Video (12:57-15:38)?
gutes video
der Code im Link ist am Ende die LED PIN ( HIGH)
und Low vertauscht er ist also nicht gleich wie im Video.
egal hab nur falsch abegschrieben, es macht ein Unterschied wenn man buttonstate=letzterstatus oder letzterstatus = buttonstatus macht.
Wo finde ich das Programm?
Tolles Video!
Den Link findest du in der Videobeschreibung :)