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;
- float oeltemp;
- float oeldruckmpa; //Oeldruck in MPa
- float oeldruckbar; //Oeldruck in bar
- float oeldruckbaralt; //Oeldruck aus dem vorigen Programmzyklus
- char secline;
- float adcoel; //Ergebnis des Oeldruck ADC (0-1023)
- float voel; //Ausgangsspannung Oeldrucksensor (0-4,5V sensorbedingt)
- int atemp; //Aussentemperatur
- int 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("Oel: ");
- lcd.print(oeldruckbar,1);
- 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
- lcd.setCursor(0,1);
- lcd.print("Oeltemp. X ");
- lcd.print((char)223);
- lcd.print("C ");
- M1=0;
- if ((unsigned long)(millis() - previousMillis) >= 20000){
- previousMillis=millis();
- M1=0;
- }
- else {
- }
- }
- else {
- //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);
- lcd.print("A-Temp: ");
- 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;
- }
- else {
- }
- }
- atempalt=atemp; //Merker Variable für Temperaturwert
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement