Arduino Display Timeout

OP #4528275
Lesenswert?

Hallo,
ich habe ein Sketch für den Arduino zum Temperatur messen mit dem DHT11 
geschrieben. Die gemessenen Daten werden nun auf einem LCD Display 
(hd44780) angezeigt. So weit so Gut. Nun möchte ich aber das diese 
Schaltung Energiesparend betrieben wird. Also soll die 
Hintergrundbeleuchtung vom Display mit einem Taster ein geschaltet 
werden und denn nach 5 Sekunden wieder von alleine ausgehen. Und da ist 
auch schon mein Problem, ich kriege es nicht hin den Sketch so 
umzuschreiben das dies so Funktioniert.

LG Tobi

Hier ist noch der Sketch:

#include <dht11.h>
#include <LiquidCrystal.h>

dht11 DHT11;
#define DHT11PIN 8

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


void setup()
{
  lcd.begin(16, 2);
  lcd.print("DHT 11");
  delay(1000);
  lcd.clear();
}

void loop()
{
  int chk = DHT11.read(DHT11PIN);

  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print((float)DHT11.temperature, 2);
  lcd.print(" C");

  lcd.setCursor(0, 1);
  lcd.print("RelF: ");
  lcd.print((float)DHT11.humidity, 2);
  lcd.print(" %");

  delay(2000);
}
#4528308
Lesenswert?

@  Tobias Mohr (tobi100)

>Hintergrundbeleuchtung vom Display mit einem Taster ein geschaltet
>werden und denn nach 5 Sekunden wieder von alleine ausgehen. Und da ist
>auch schon mein Problem, ich kriege es nicht hin den Sketch so
>umzuschreiben das dies so Funktioniert.

Dazu muss man etwas ähnliches wie eines Statemachine machen, wenn 
gleich auf sehr einfachem Niveau.
Und wenn man es wirklich gut machen will, nimmt man einen Timer und 
Multitasking.
Aber erstmal der einfache Ansatz, das ist schon ein Quantensprung für 
die meisten Arduino-User ;-)

1
#include <dht11.h>
2
#include <LiquidCrystal.h>
3

4
dht11 DHT11;
5
#define DHT11PIN 8
6
#define TASTER 1
7
#define LICHT 2
8

9
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
10

11
void setup()
12
{
13
  lcd.begin(16, 2);
14
  lcd.print("DHT 11");
15
  delay(1000);
16
  lcd.clear();
17
  // Eingangpin definieren, mit int. Pull Up!!! TODO
18
  pinmode(TASTER, INPUT_PULLUP);
19
  pinmode(LICHT, OUTPUT);
20
}
21

22
void loop()
23
{
24
  static int cnt, timeout, taster_alt;
25
  int chk, taster;
26
  
27
  cnt++;
28
  if (cnt == 200) {
29
      cnt = 0;
30
      chk = DHT11.read(DHT11PIN);
31
      lcd.setCursor(0, 0);
32
      lcd.print("Temp: ");
33
      lcd.print((float)DHT11.temperature, 2);
34
      lcd.print(" C");
35
    
36
      lcd.setCursor(0, 1);
37
      lcd.print("RelF: ");
38
      lcd.print((float)DHT11.humidity, 2);
39
      lcd.print(" %");
40
  }
41

42
  // Taster einlesen und Flanke erkennen
43
  taster = digital_read(TASTER);
44
  if (!taster && taster_alt) {
45
    timeout = 500;
46
    // Licht einschalten
47
    digital_write(LICHT, HIGH);
48
  }
49
  taster_alt = taster; 
50

51
  if (timeout) {
52
    timeout--;
53
  } else {
54
    // Licht ausschalten
55
    digital_write(LICHT, LOW);
56
  }
57

58
  delay(10);
59
}
OP #4528326
Lesenswert?

Vielen Dank schon mal für die Antwort. Doch beim Hochladen wird mir eine 
Fehlermeldung angezeigt.

 Arduino: 1.6.6 (Windows 10), Board: "Arduino Nano, ATmega328"

C:\Users\tobi\AppData\Local\Temp\arduino_8f0661d10a68cfa89a36d4a98991d82 
e\sketch_mar31c.ino:  In function 'void setup()':

sketch_mar31c:18: error: 'pinmode' was not declared in this scope

   pinmode(TASTER, INPUT_PULLUP);

                               ^

C:\Users\tobi\AppData\Local\Temp\arduino_8f0661d10a68cfa89a36d4a98991d82 
e\sketch_mar31c.ino:  In function 'void loop()':

sketch_mar31c:43: error: 'digital_read' was not declared in this scope

   taster = digital_read(TASTER);

                               ^

sketch_mar31c:47: error: 'digital_write' was not declared in this scope

     digital_write(LICHT, HIGH);

                              ^

sketch_mar31c:55: error: 'digital_write' was not declared in this scope

     digital_write(LICHT, LOW);

                             ^

exit status 1
'pinmode' was not declared in this scope

Ungültige Bibliothek C:\Program Files 
(x86)\Arduino\libraries\dht11-master in C:\Program Files 
(x86)\Arduino\libraries\dht11-master gefunden
Ungültige Bibliothek C:\Program Files 
(x86)\Arduino\libraries\dht11-master in C:\Program Files 
(x86)\Arduino\libraries\dht11-master gefunden

  Dieser Report hätte mehr Informationen mit
  "Ausführliche Ausgabe während der Kompilierung"
  aktiviert in Datei > Einstellungen.
#4528365
Lesenswert?

@  Tobias Mohr (tobi100)

>Vielen Dank schon mal für die Antwort. Doch beim Hochladen wird mir eine
>Fehlermeldung angezeigt.

>sketch_mar31c:18: error: 'pinmode' was not declared in this scope

Ja mein Gott, ich hab das einfach im Editor getippt und NICHT im 
Compiler geprüft. Und ich programmiere auch nur gelegentlich 
Arduino-Style.

>   pinmode(TASTER, INPUT_PULLUP);

Es heißt

pinMode(TASTER, INPUT_PULLUP);

                               ^
>   taster = digital_read(TASTER);

   taster = digitalRead(TASTER);

                               ^

>     digital_write(LICHT, HIGH);

     digitalWrite(LICHT, HIGH);


>    digital_write(LICHT, LOW);

    digitalWrite(LICHT, LOW);
                             ^

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren