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 | 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 | }
|
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); ^
Konnte es jetzt doch zum laufen kriegen. Und nochmal vielen Dank für den Sketch. :D LG Tobi
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.ä.
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.