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);
}
@ 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
dht11DHT11;
5
#define DHT11PIN 8
6
#define TASTER 1
7
#define LICHT 2
8
9
LiquidCrystallcd(12,11,5,4,3,2);
10
11
voidsetup()
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
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.
@ 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);
^
Falk B. schrieb:> Aber erstmal der einfache Ansatz, das ist schon ein Quantensprung für> die meisten Arduino-User ;-)
:)
Und wenn man statt "cnt++" einfach "millis()" benutzt, bekommt man noch
so eine Art einfachen Zeitbezug mit rein; also zumindest ein ungefähres
"nach 5 Sekunden" o.ä.