Advertisement
Guest User

Untitled

a guest
May 31st, 2019
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Bibliotheken
  2. #include <DHT.h>
  3. #include <Wire.h>
  4. #include <LCD.h>
  5. #include <LiquidCrystal_I2C.h>
  6. #include <DallasTemperature.h>
  7. #include <OneWire.h>
  8.  
  9. //Konstanten
  10. #define ONE_WIRE_BUS 2
  11. OneWire oneWire(ONE_WIRE_BUS);
  12. DallasTemperature sensors(&oneWire);
  13.  
  14. //I2C LCD einbinden
  15. #define I2C_ADDR 0x27 //I2C Adresse des LCDs lautet 0x27 (kann an der I2C Platine angestellt werden)
  16. #define BACKLIGHT_PIN 3
  17. #define En_pin 2
  18. #define Rw_pin 1
  19. #define Rs_pin 0
  20. #define D4_pin 4
  21. #define D5_pin 5
  22. #define D6_pin 6
  23. #define D7_pin 7
  24. LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
  25.  
  26. //Variablen
  27. float vorherigeZeit;
  28. int16_t oeltemp;
  29. float oeldruckmpa; //Oeldruck in MPa
  30. float oeldruckbar; //Oeldruck in bar
  31. 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
  32. char secline;
  33. float adcoel; //Ergebnis des Oeldruck ADC (0-1023)
  34. float voel; //Ausgangsspannung Oeldrucksensor (0-4,5V sensorbedingt)
  35. int16_t atemp; //Aussentemperatur
  36. int16_t atempalt; //Aussentemperatur aus dem vorigen Programmzyklus
  37. unsigned long previousMillis=0;
  38. 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.
  39.  
  40. void setup()
  41. {
  42.   //Serielle Verbindung konfigurieren
  43.   Serial.begin(9600);
  44.   lcd.begin(16,2);
  45.   lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  46.   lcd.setBacklight(HIGH);
  47.   sensors.begin();
  48. }
  49.  
  50. void loop()
  51. {
  52.   //Oeldruck
  53.   adcoel=analogRead(1); //ADC A1 einlesen und Wert der Variablen "adcoel" zuweisen
  54.   voel=(adcoel/1023)*5; //ADC Wert in Spannung umrechnen und Wert der Variable "voel" zuweisen
  55.   oeldruckmpa=(((voel/5)-0.1)/1.6); //Oeldruck in MPa berechnen und der Variable "oeldruckmpa" zuweisen
  56.   oeldruckbar=oeldruckmpa*10; //Oeldruck in bar umrechnen und der Variablen "oeldruckbar" zuweisen
  57.  
  58.   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.
  59.   lcd.setCursor(0,0); //Cursor auf Stelle 1, Zeile 1 setzen
  60.   lcd.print("Oil      ");
  61.   if(oeldruckbar>=0.1)lcd.print(oeldruckbar,1);
  62.   if(oeldruckbar<0.1)lcd.print("  0");
  63.   lcd.print(" bar");
  64.   oeldruckbaralt=oeldruckbar; //Merker Variable für alten Druckwert
  65.   }
  66.   else {
  67.   }
  68.  
  69. //Roll-over damit die zweite Displayzeile zyklisch zwischen A-Temp und Oeltemp wechselt
  70. if ((unsigned long)(millis() - previousMillis) <= 10000){
  71.   //Oeltemperatur
  72.   oeltemp=114;  //Platzhalter
  73.   //Umwandlung ADC zu Temperatur fehlt ggf. noch
  74.   lcd.setCursor(0,1);
  75.   if(oeltemp<-9)lcd.print("Oil      ");
  76.   if(oeltemp<0 && oeltemp >=-9)lcd.print("Oil       ");
  77.   if(oeltemp<10 && oeltemp>=0)lcd.print("Oil        ");
  78.   if(oeltemp>=10 && oeltemp<100)lcd.print("Oil       ");
  79.   if(oeltemp>=100)lcd.print("Oil      ");
  80.   lcd.print(int(oeltemp));
  81.   lcd.print("  ");
  82.   lcd.print((char)223);
  83.   lcd.print("C    "); //Leerzeichen, damit die alten Zeile im Display vollständig überschrieben wird. Schlechter Stil ;)
  84.   M1=0;
  85. }
  86. if ((unsigned long)(millis() - previousMillis) > 10000 && (unsigned long)(millis() - previousMillis) <= 20000){
  87.   //Aussentemperatur
  88.   sensors.requestTemperatures();
  89.   atemp=sensors.getTempCByIndex(0);
  90.  
  91.  if (atemp!=atempalt || M1<1) { //if-else damit das Display nur neu beschrieben wird, wenn sich der Wert geändert hat
  92.   lcd.setCursor(0,1);
  93.   if(atemp<-9)lcd.print("Air      ");
  94.   if(atemp<0 && atemp >=-9)lcd.print("Air       ");
  95.   if(atemp<10 && atemp>=0)lcd.print("Air        ");
  96.   if(atemp>=10 && atemp<100)lcd.print("Air       ");
  97.   if(atemp>=100)lcd.print("Air      ");
  98.   lcd.print(atemp);
  99.   lcd.print("  ");
  100.   lcd.print((char)223);
  101.   lcd.print("C        "); //Leerzeichen, damit die alten Zeile im Display vollständig überschrieben wird. Schlechter Stil ;)
  102.   M1=1;
  103.  }
  104. }
  105. if ((unsigned long)(millis() - previousMillis) > 20000 && (unsigned long)(millis() - previousMillis) <= 30000){
  106.   lcd.setCursor(0,1);
  107.   lcd.print("LSD       93  ");
  108.   lcd.print((char)223);
  109.   lcd.print("C        ");
  110. }
  111. if ((unsigned long)(millis() - previousMillis) > 30000){
  112.   previousMillis=millis();
  113.   M1=0;
  114. }
  115.  
  116.   atempalt=atemp; //Merker Variable für Temperaturwert
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement