Tasterabfrage funktioniert nicht
|
04.02.2021, 17:07
(Dieser Beitrag wurde zuletzt bearbeitet: 04.02.2021 18:27 von Moehn.)
Beitrag #1
|
|||
|
|||
Tasterabfrage funktioniert nicht
Hallo
Nun melde ich mich auch einmal mit einem Problem. Einige meiner Probleme konnte ich ja schon mit dem Forum selber lösen, aber bei unten stehendem Problem erkenne ich den Fehler nicht. Ich bin 52, und habe schon vor einigen Jahren mit den Atmels rumgespielt, bin aber bei ca. dem Atmeg32 leider ausgestiegen(Job, Familie, etc). Also seit gut 10 Jahren bin ich dbzgl. nicht mehr aktiv gewesen. Nun habe ich aber wieder ein paar kleine Anwendungen für die MC´s. Deshalb arbeite ich mich wieder in die Arduinos ein. Ich habe auch schon einige Beispiele (Taster ohne Delay, LED etc) nachprogrammiert. Hat alles bis dahin funktioniert. Und hier mal mein aktuelles Problem. Ich möchte ein Programm schreiben was eine kleine Heizung steuert. Hierzu sind (bzw. werden kommen) an verschiedenen Stellen im Ablauf immer wierder kleine Menues zum Taster abfragen. Deshalb habe ich mir überlegt die Tasterabfrage (4 Taster) in eine eigene Procedur zu schreiben, die ich entsprechend immer wieder aufrufe. So habe ich das damals (vor 10 Jahren) auch immer gemacht und hat so gut funktioniert. Aber in dem Code unten funktioniert es nicht. In der Funktion Initialisierung rufe ich die Funktion Taste (Taster abfragen) auf. Solange keiner der 4 Taster gedrückt ist läuft die while Schleife. DIes ist auch zeitunkritisch weil hier definitiv gewartet wird und nichts anderes gemacht werden soll. Wird dann ein Taster gedrückt soll der Variablen Tasterstatus (Startwert=0) der Wert 1-4, je nach gedrücktem Taster zugewiesen werden. Anschliessend wird der Wert in Tastenstatus ausgelesen und je nach Wert in eine andere Funktion gesprungen (Warmduschen, Kaltduschen). DIe ganzen Delay und Serial.Print habe ich nur eingefügt, um im Monitor zu schauen, wo das Program aktuell ist. Hier stelle ich nun fest, das in der Tasterabfrage der Varaiblen Tastenstatus nie ein wert (z.B. 1 oder 2) zugewiesen wird. Und genau dieses versteh ich nicht und finde auch den Fehler nicht. Die Hardware ist o.k.- hab ich mit einem anderen Programm geprüft. Ansonsten ist das ein Arduino nano every mit einem Grafikdisplay, 4 Tastern und 4 LED. Wenn ich sonst noch etwas verbessern kann - auch bitte her damit. Ich steige gerade erst wieder ein und würde mich a[/code]uch selber eher noch in die Anfängerabteilung stecken. Grüße Dirk Code: #include <Arduino.h> |
|||
04.02.2021, 17:35
Beitrag #2
|
|||
|
|||
RE: Tasterabfrage funktioniert nicht
(04.02.2021 17:07)Moehn schrieb: ...Ja gerne, du kannst Programmcode nach dieser Anleitung oben korrigieren oder neu einstellen. Damit wird er besser lesbar weil Formatierungen nicht verloren gehen. Gruß Arne Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort. |
|||
04.02.2021, 17:50
Beitrag #3
|
|||
|
|||
RE: Tasterabfrage funktioniert nicht
Danke, schon was dazugelernt.
Dirk |
|||
05.02.2021, 01:14
(Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2021 02:34 von Corvus.)
Beitrag #4
|
|||
|
|||
RE: Tasterabfrage funktioniert nicht
Die While-Schleife wird nur durchlaufen, wenn keine Taste Gedrückt wird. In der Schleife, direkt danach wird geprüft ob eine Taste gedrückt wird. Dies geschieht aber nur, wenn sie nur wenige µs vorher nicht gedrückt war.
Eine Lösung wäre zb Code: Tastenstus = 0; Wobei ich es wohl eher so lösen würde: Code: void Taste() { |
|||
05.02.2021, 15:23
Beitrag #5
|
|||
|
|||
RE: Tasterabfrage funktioniert nicht
Hallo Lorenz
Vielen Dank, das war es. Logisches Denken ist scheinbar nicht gleich logisch programmieren. Ich bin davon ausgegangen, dass nachdem ein Taster gedrückt wird die If-Abfragen nochmal durchlaufen werden. Stimmt ja nicht - die While Schleife wird ja dann vorher schon beendet und die If Abfragen werden übersprungen und somit der Variablen Tastenstatus auch kein wert zugewiesen. Hab´s geändert und läuft nun. Jetzt kann ich erstmal weitermachen. Danke Dirk |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste