Moin Leute,
wieder eine Frage zum Controllino (Typ Maxi) - hier eigentlich nicht so ganz richtig -
aber hier bekommt man wenigstens Antworten!!!
Wir wissen ja alle, dass sich der DHT22 ab und zu „aufhängt“.
Meine Lösung für das Problem:
- Einen pin als Ausgang definieren und als Ub+ 5V für den DHT22 verwenden
- Diesen im setup auf HIGH (+5V) schalten
- Diesen dann in regelmäßigen Abständen auf LOW schalten (d.h. keine Versorgungsspannung für den DHT22 = Reset )
- Warten, (das Programm hat Zeit!)
- Ausgang wieder HIGH (+5V) schalten
Die Hardware Versuche dazu liefen sehr gut.
Jetzt habe ich versucht ein Test-Programm zu schreiben.
(Reset über millis() nach Ablauf einer definierten Zeit)
Aber sobald ich die ausgeblendeten Zeilen aktiviere bekomme ich die Fehlermeldung „ stray \342´ in program “
Sonst würde das Programm laufen wie es soll.
(Anzeige millis in der ersten Zeile - Temp. und Feuchte in der zweiten Zeile)
// Test-Programm "DHT22_LCD_Jb1.ino" läuft!! 04.11.2023
// Rev.: 1 Variable für Millis einfügen - Anzeige Temp. und Feuchte in Zeile 2 -> funktioniert nur mit float-Variable - diese muss vor dem setup deklariert werden!
// Rev.: 2 Millis direkt in Zeile 1 anzeigen
// Rev.: 3/4 Reset über Millis
// 04.11.2023 - läuft ?? -> Nein :-( Board "CONTROLLINO MAXI", Port X, Programmer: AVRISP mkll
byte pin_DHT = 44;
#include <Controllino.h> // Usage of CONTROLLINO library
#include <SimpleDHT.h> //Fügt DHT22 Libary ein
SimpleDHT22 dht22; // Typ DHT22 zuordnen
#include <LiquidCrystal.h> // läd das LCD-Programm (library code)
LiquidCrystal lcd(9, 10, 11, 12, 13, 42); // initialize the library Syntax: LiquidCrystal lcd(rs, enable, d4, d5, d6, d7)
float Alte_Zeit; //Variable zum Speichern des alten Wertes
float Zeitinterval = (1000*60); //Variable für gewünschte Reset-Zeitdauer (1sek=1000)
float zeit = 0;
float h = 0; // Variable für Luftfeuchtigkeit definieren als "float" (Fliesskomma Wert mit Nachkommastelle.von -3.4028235E+38 bis 3.4028235E+38)
float t = 0; // Variable für Temperatur definieren als "float"
void setup()
{
pinMode(43, OUTPUT); digitalWrite(43, HIGH); // Spannungsversorgung für DHT22 einschalten
lcd.begin(16, 2); // Display mit 16 Zeichen - in 2 Zeilen
lcd.clear(); // Display löschen
}
void loop()
{
zeit = millis();
lcd.setCursor(0, 0); // Cursor auf Position 1, Zeile 1
lcd.print("Millis: ");
lcd.print( zeit,0);
/*if (zeit – Alte_Zeit > Zeitinterval)
{
Alte_Zeit = millis();
//.... weiterer Code für Reset DHT22 hier in Planung
}
*/
Lesen_DHT();
}
void Lesen_DHT() // und am LCD Display anzeigen
{
pinMode(pin_DHT, INPUT); // pin # als Eingang für DHT definieren
int err = dht22.read2(pin_DHT, &t, &h, NULL);
lcd.setCursor(0, 1); lcd.print(t,1); lcd.print("");lcd.write (223); lcd.print("C ");
lcd.print(h,1); lcd.print(" %rF ");
delay(500); // 2 Sekunden Pause
}
Kann mir jemand weiterhelfen?
Gruß Martin