So, der erste Teil ist jetzt mal funktionstüchtig.
Könnte sich bitte jemand den Code, den ich mir aus Schnipseln, Beispielen und Überlegen gebastelt habe, mal durchsehen, ob es auch "sauber" ist? Bzw. welche Verbesserungs- Vereinfachungsvorschläge gibt es, bevor ich weitermache?
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#include <DHT.h>
#include <DS3232RTC.h>
#include <Time.h>
DHT dht;
OneWire ds18(8); //Anschluss der beiden DS18B20 an PIN 8 (4k7 zwischen Plus und Data)
DallasTemperature sensors(&ds18);
LiquidCrystal lcd(12, 11, 4, 5, 6, 7); //Achtung, nicht an PINs 2 und 3 wegen zusätzlicher SDA und SCL Funktion
DeviceAddress Probe01 = { 0x28, 0xFF, 0x82, 0xEF, 0x35, 0x16, 0x03, 0x9C }; //Adressen der beiden DS18B20
DeviceAddress Probe02 = { 0x28, 0xFF, 0x83, 0x62, 0x35, 0x16, 0x03, 0x15 };
unsigned long previousMillis = 0; //Delay ohne ausbremsen des Codes
unsigned long interval = 2000; // 2s Delay
void setup(){ //***********************************************************************************Set Up
setSyncProvider(RTC.get); //Uhrzeit der RTC auslesen
sensors.begin(); //Library starten
sensors.setResolution(Probe01, 12); //Auflösung auf 12bit (0,0625°C) einstellen
sensors.setResolution(Probe02, 12); //kleinstmögliche Auflösung, delay min. 750ms
lcd.begin (20,4); //Start des LCD, 20 Zeichen, 4 Zeilen
lcd.print("Initialisierung....");
delay(1000);
lcd.clear(); //Löschen des Displays
dht.setup(9); //Anschluss des DHT22 an PIN 9
}
void loop(){ //***********************************************************************************Loop
printClock(); //Uhrzeit anzeigen
tempAuslesen(); //Temperaturen und Feuchte anzeigen
lcd.setCursor(0, 0); //Einrichten der Beschreibungen in der ersten Zeile
lcd.print("T1: ");
lcd.setCursor(5, 0);
lcd.print("T2: ");
lcd.setCursor(10, 0);
lcd.print("T3: ");
lcd.setCursor(15, 0);
lcd.print("RelF");
}
//*************************************************************************************************Print Clock
void printClock() { //Uhrzeit im Format HH:MM:SS ausgeben
lcd.setCursor(12,3); //Anzeige der Uhrzeit rechts unten im Display
print_Digits(hour());
lcd.print(":");
print_Digits(minute());
lcd.print(":");
print_Digits(second());
}
//*************************************************************************************************Print Digits
void print_Digits(int digits) { //Bei der Uhrzeit
if(digits < 10) //führende Null bei Zahlen >10 anzeigen
lcd.print('0');
lcd.print(digits);
}
//*************************************************************************************************TempAuslesen
void tempAuslesen(){ //Temperaturen des DHT und DS18B20 auslesen
unsigned long currentMillis = millis(); //Delay einstellen
if ( currentMillis - previousMillis >= interval ){
previousMillis = currentMillis;
float humidity = dht.getHumidity(); //Feuchte des DHT auslesen
float temperature = dht.getTemperature(); //Temperatur des DHT auslesen
sensors.requestTemperatures(); //Auslesen Temperaturen der DS18B20 am Bus auslesen
lcd.setCursor(0,1); //Ausgabe der Temperaturen und Feuchte in der zweiten Zeile
printTemperature(Probe01); //Anzeige der oberen Temperatur DS18B20
lcd.setCursor(5,1);
lcd.print(temperature, 1); //Anzeige der Temperatur unten DHT22
lcd.setCursor(10,1);
printTemperature(Probe02); //Anzeige der Temperatur Mitte DS18B20
lcd.setCursor(15, 1);
lcd.print(humidity, 1); //Anzeige der Feuchte DHT22
}
}
//*************************************************************************************************PrintTemperaturen
void printTemperature(DeviceAddress deviceAddress){ //Anzeige der Temperaturen DS18B20
float tempC = sensors.getTempC(deviceAddress);
lcd.print(tempC,1);
}