Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Bibliotheken
- #include <DHT.h>
- #include <Wire.h>
- #include <LCD.h>
- #include <LiquidCrystal_I2C.h>
- #include <DallasTemperature.h>
- #include <OneWire.h>
- //Konstanten
- #define ONE_WIRE_BUS 2
- OneWire oneWire(ONE_WIRE_BUS);
- DallasTemperature sensors(&oneWire);
- //I2C LCD einbinden
- #define I2C_ADDR 0x27 //I2C Adresse des LCDs lautet 0x27 (kann an der I2C Platine angestellt werden)
- #define BACKLIGHT_PIN 3
- #define En_pin 2
- #define Rw_pin 1
- #define Rs_pin 0
- #define D4_pin 4
- #define D5_pin 5
- #define D6_pin 6
- #define D7_pin 7
- LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
- //Variablen
- float vorherigeZeit;
- int16_t oeltemp;
- float oeldruckmpa; //Oeldruck in MPa
- float oeldruckbar; //Oeldruck in bar
- float oeldruckbaralt=10; //Oeldruck aus dem vorigen Programmzyklus, Variable zum Start einmalig den Wert "10", damit der Öldruck in jedem Fall zu Beginn einmal auf das Display geschrieben wird
- char secline;
- float adcoel; //Ergebnis des Oeldruck ADC (0-1023)
- float voel; //Ausgangsspannung Oeldrucksensor (0-4,5V sensorbedingt)
- int16_t atemp; //Aussentemperatur
- int16_t atempalt; //Aussentemperatur aus dem vorigen Programmzyklus
- unsigned long previousMillis=0;
- int M1; //Merker damit A-Temp bei jedem Aufruf des zugehörigen Else Zweigs zunächst einmal auf dem Display ausgegeben wird und danach nur bei Änderung der Messgröße auf dem Display aktualisiert.
- void setup()
- {
- //Serielle Verbindung konfigurieren
- Serial.begin(9600);
- lcd.begin(16,2);
- lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
- lcd.setBacklight(HIGH);
- sensors.begin();
- }
- void loop()
- {
- //Oeldruck
- adcoel=analogRead(1); //ADC A1 einlesen und Wert der Variablen "adcoel" zuweisen
- voel=(adcoel/1023)*5; //ADC Wert in Spannung umrechnen und Wert der Variable "voel" zuweisen
- oeldruckmpa=(((voel/5)-0.1)/1.6); //Oeldruck in MPa berechnen und der Variable "oeldruckmpa" zuweisen
- oeldruckbar=oeldruckmpa*10; //Oeldruck in bar umrechnen und der Variablen "oeldruckbar" zuweisen
- if (oeldruckbar<(oeldruckbaralt-0.1) || oeldruckbar>(oeldruckbaralt+0.1)) { //if-else damit das Display nur neu beschrieben wird, wenn der Wert um mehr als 0,1 bar gestiegen oder gesunken ist.
- lcd.setCursor(0,0); //Cursor auf Stelle 1, Zeile 1 setzen
- lcd.print("Oil ");
- if(oeldruckbar>=0.1)lcd.print(oeldruckbar,1);
- if(oeldruckbar<0.1)lcd.print(" 0");
- lcd.print(" bar");
- oeldruckbaralt=oeldruckbar; //Merker Variable für alten Druckwert
- }
- else {
- }
- //Roll-over damit die zweite Displayzeile zyklisch zwischen A-Temp und Oeltemp wechselt
- if ((unsigned long)(millis() - previousMillis) <= 10000){
- //Oeltemperatur
- oeltemp=114; //Platzhalter
- //Umwandlung ADC zu Temperatur fehlt ggf. noch
- lcd.setCursor(0,1);
- if(oeltemp<-9)lcd.print("Oil ");
- if(oeltemp<0 && oeltemp >=-9)lcd.print("Oil ");
- if(oeltemp<10 && oeltemp>=0)lcd.print("Oil ");
- if(oeltemp>=10 && oeltemp<100)lcd.print("Oil ");
- if(oeltemp>=100)lcd.print("Oil ");
- lcd.print(int(oeltemp));
- lcd.print(" ");
- lcd.print((char)223);
- lcd.print("C "); //Leerzeichen, damit die alten Zeile im Display vollständig überschrieben wird. Schlechter Stil ;)
- M1=0;
- }
- if ((unsigned long)(millis() - previousMillis) > 10000 && (unsigned long)(millis() - previousMillis) <= 20000){
- //Aussentemperatur
- sensors.requestTemperatures();
- atemp=sensors.getTempCByIndex(0);
- if (atemp!=atempalt || M1<1) { //if-else damit das Display nur neu beschrieben wird, wenn sich der Wert geändert hat
- lcd.setCursor(0,1);
- if(atemp<-9)lcd.print("Air ");
- if(atemp<0 && atemp >=-9)lcd.print("Air ");
- if(atemp<10 && atemp>=0)lcd.print("Air ");
- if(atemp>=10 && atemp<100)lcd.print("Air ");
- if(atemp>=100)lcd.print("Air ");
- lcd.print(atemp);
- lcd.print(" ");
- lcd.print((char)223);
- lcd.print("C "); //Leerzeichen, damit die alten Zeile im Display vollständig überschrieben wird. Schlechter Stil ;)
- M1=1;
- }
- }
- if ((unsigned long)(millis() - previousMillis) > 20000 && (unsigned long)(millis() - previousMillis) <= 30000){
- lcd.setCursor(0,1);
- lcd.print("LSD 93 ");
- lcd.print((char)223);
- lcd.print("C ");
- }
- if ((unsigned long)(millis() - previousMillis) > 30000){
- previousMillis=millis();
- M1=0;
- }
- atempalt=atemp; //Merker Variable für Temperaturwert
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement