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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.