// ***************** Start Konfiguration ********************** #define Anzahl_Sensoren_DS18B20 7 // Anzahl der angeschlossenen Sensoren - Mögliche Werte: '0','1','2', ... #define ONE_WIRE_BUS 2 // ***************** Ende Konfiguration ********************** #include // Wire Bibliothek hochladen #include // Library für DHT Sensor (Durchfluss Sensor)aufrufen #include #include // Bibliothek für DS18B20 #include // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek hochladen int tasterPin = 11; int ledPin = 9; DeviceAddress DS18B20_Adressen; OneWire oneWire(ONE_WIRE_BUS); DallasTemperature myDS18B20(&oneWire); DallasTemperature sensors(&oneWire); // Übergeben Sie die oneWire-Referenz an die DallasTemperature-Bibliothek LiquidCrystal_I2C lcd1(0x27, 16, 2); // Hier wird das erste Display benannt (Adresse/Zeichen pro Zeile/Anzahl Zeilen). // In unserem Fall „lcd1“. Die Adresse des I²C Displays kann je nach Modul // variieren. LiquidCrystal_I2C lcd2(0x26, 16, 2); // Hier wird das zweite LCD benannt, hier "lcd2". const float No_Val = 999.99; float Temperatur[Anzahl_Sensoren_DS18B20]; long Imp; long starttime; void setup(void) { pinMode(tasterPin,INPUT); pinMode(ledPin, OUTPUT); lcd1.init(); //Im Setup wird das LCD1 gestartet - Durchfluß lcd1.backlight(); //Hintergrundbeleuchtung von LCD1 einschalten (0 schaltet die Beleuchtung aus). lcd2.init(); //Im Setup wird das LCD2 gestartet - Temperaturen lcd2.backlight(); //Hintergrundbeleuchtung von LCD2 einschalten (0 schaltet die Beleuchtung aus). sensors.begin(); //Starten Sie die Bibliothek discoverOneWireDevices(); if ((Anzahl_Sensoren_DS18B20 > 0)) { myDS18B20.begin(); for (byte i = 0 ; i < myDS18B20.getDeviceCount(); i++) { if (myDS18B20.getAddress(DS18B20_Adressen, i)) { myDS18B20.setResolution(DS18B20_Adressen ); } } } } void loop(void) { digitalWrite(ledPin, HIGH); delay(200); digitalWrite(ledPin, LOW); delay(200); if (digitalRead(tasterPin)==HIGH){ } if (digitalRead(tasterPin)==HIGH){ digitalWrite(ledPin, HIGH); } if (digitalRead(tasterPin)==HIGH){ digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } Imp = 0; starttime = micros(); do { if (pulseIn(12, HIGH) > 0 ) Imp++; } while( micros() < (starttime + 1e6)); lcd1.setCursor(0, 0); lcd1.print("flow = "); lcd1.print(Imp); lcd1.print(" Imp/s "); lcd1.setCursor(0, 1); float z = Imp; z = 24*z/100; if (z < 1) // ist z kleiner als 1, dann nächste Zeile { lcd1.print(z,2); } //das Ergebnis für l/min mit 2 Kommastellen if (z >= 1 && z<=2) { lcd1.print(z,1); } if (z > 2) // ist z größer als 2, dann nächste Zeile { lcd1.print("-> Q > Q(max) "); } //über dem Meßbereich lcd1.print(" l/min "); if ((Anzahl_Sensoren_DS18B20 > 0)) { myDS18B20.requestTemperatures(); delay(250); //250msec Warten for (byte i = 0 ; i < Anzahl_Sensoren_DS18B20; i++) { if (i < myDS18B20.getDeviceCount()) { Temperatur[i] = myDS18B20.getTempCByIndex(i); if (Temperatur[i] == DEVICE_DISCONNECTED_C) { Temperatur[i] = No_Val; } else { sensors.requestTemperatures(); // Senden Sie den Befehl für alle Geräte am Bus, um eine Temperaturumrechnung durchzuführen float tempC = myDS18B20.getTempCByIndex(i); // Abrufen der Temperatur in Grad Celsius für den Geräteindex lcd2.setCursor(0,0); // Drucken Sie die Temperatur auf dem LCD; lcd2.print("Kueche:"); lcd2.setCursor(0,1); lcd2.print(tempC); lcd2.write(0); // Drucken Sie das benutzerdefinierte Zeichen lcd2.print("C"); delay(1000); // 1 Sec. Warten } } } } } void discoverOneWireDevices(void) { byte i; byte addr[8]; while (oneWire.search(addr)) { for ( i = 0; i < 8; i++) { if (addr[i] < 16) { } if (i < 7) { } } if ( OneWire::crc8( addr, 7) != addr[7]) { return; } } oneWire.reset_search(); return; }