Hallo Ich habe aus einer Bauanleitung eine Dosierpumpe für mein Aquarium gebaut. Diese ist zum dosieren von Flüssigdünger. Hardwareseitig besteht das Projekt aus dem Arduino UNO, RTC DS 3231, 4 Relais und der LCD 20x4 I2C.Dann halt noch die 5 Taster. Alles soweit funktioniert. Aber schön währe es wenn ich das Backlight der LCD nach gewisser Zeit (30 sek.) ausschaltet und bei erneuten Tastendruck wieder einschaltet. Da ich aber selber keine Erfahrung mit der Programmierung des Arduino habe und ich auch schon einiges in der IDE ohne Erfolg ausprobiert habe, versuche ich hier mein Glück. Dabei ist es mir eigentlich egal ob das für alle 5 Tasten oder nur für eine gilt.
:
Verschoben durch User
Beitrag #5610966 wurde von einem Moderator gelöscht.
Beitrag #5611015 wurde von einem Moderator gelöscht.
@ Thomas A. (tom2jump) >Alles soweit funktioniert. Aber schön währe es wenn ich das Backlight >der LCD nach gewisser Zeit (30 sek.) ausschaltet und bei erneuten >Tastendruck wieder einschaltet. Also braucht man einen Softwaretimer, der bei jedem beliebigen Tastendruck auf einen Wert X gesetzt wird und periodisch runter zählt. Wenn er bei 0 angekommen ist, wird das Backlight ausgeschaltet. Das ist ein retriggerbares Monoflop in Software. Dafür braucht man einen Hardware-Timer und eine passende ISR. Die Struktur deiner Software ist so, naja. Kann man aber reinfrickeln. Mach ich jetzt aber nicht.
Hallo, ist mir auch zu unübersichtlich. Wenn ich she, daßd a extra eine "Reset" Funktion eingebaut ist die auch an allen möglichen Stellen auferufen wird... Sonst hätte es ja die übliche millis() + Offset Abfrage getan. Vielleicht erbarmt sich ja der Programmieer der Bauanleitung wenn es ihn noch gibt. Gruß aus Berlin Michael
Falk B. schrieb: > Dafür braucht man einen Hardware-Timer und eine passende ISR. Den Programmkot schaue ich mir nicht an, das können andere Leute besser. Die Aufgabenstellung an sich ist Kindergarten. Arduino hat einen Timer "Millisekunden seit Start". Des weiteren läuft der ständig in seiner Loop herum. Also eine globale Variable unsigned long anlegen "Backlight": Backlight = millis() + 30000 In der Hauptschleife fragt man zyklisch ab: if (millis() > Backlight mache Licht aus. Wird eine Taste gedrückt: Licht an und ziehe den Timer neu auf: Backlight = millis() + 30000
Also es ist nunmehr kein Geheimnis, dass ich das Problem auch schon in anderen Foren gepostet habe. (Ohne Erfolg) Ich habe keine Zeit mich nur für das eine und wahrscheinlich auch einzinste Projekt mit dem Arduino mich dann mit dessen Programierung auseinanderzusetzen. Trotzdem habe ich mich jetzt nochmal mit dem Sketch auseinandergesetzt auch weil ich Urlaub habe. Nach gut 6 Stunden bin ich am Ziel angelangt. Nun was habe ich gemacht? In Zeile 25 habe ich mit: const int tasterl = 10; // Taster links den linken Taster deklariert und diesen in Zeile 29/30 mit int DisplaySchalter = 0; long DisplayAus = 0; eine Variable für den Zustand gegeben. Die Zeile 91/92 bedarf keiner Erklärung. In Zeile 102 wird mit DisplayAus = now() + 30; der Zeit 30 Sekunden addiert. In Zeile 103 wird Taster "tasterl" als Eingang definiert pinMode(tasterl, INPUT); In Zeile 136-138 wird der Taster abgefragt DisplaySchalter = digitalRead(tasterl); if (DisplaySchalter == HIGH) { DisplayAus = now() + 30; Dann noch die IF-Abfrage in Zeile 140 if (now() > DisplayAus) { lcd.noBacklight(); } else { lcd.backlight(); So funktioniert das. Ob das optimal ist oder nicht? Egal es funktioniert. Und den Taster "tasterl" (linker Taster) habe ich verwendet weil dieser im Hauptmenü keine Funktion hat.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.