Forum: Mikrocontroller und Digitale Elektronik Arduino LCD Backlight auto off


von Thomas A. (tom2jump)


Angehängte Dateien:

Lesenswert?

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.
von Falk B. (falk)


Lesenswert?

@ 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.

von Michael U. (amiga)


Lesenswert?

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

von Manfred (Gast)


Lesenswert?

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

von Thomas A. (tom2jump)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.