Advertisement
YannickF

IT_Projekt_Wetterstation_YannickFuchs

Mar 20th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.69 KB | None | 0 0
  1. #include <Wire.h>
  2. #include <SPI.h>
  3. #include <Adafruit_Sensor.h>
  4. #include <Adafruit_BMP280.h>
  5. #include <Adafruit_AM2320.h>
  6. #include <OneWire.h>
  7. #include <DallasTemperature.h>
  8. #include <LiquidCrystal.h>
  9.  
  10. //LCD
  11. LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
  12.  
  13. //Buttons
  14. #define RIGHT  0
  15. #define UP     1
  16. #define DOWN   2
  17. #define LEFT   3
  18. #define SELECT 4
  19. #define NONE   5
  20.  
  21. //Temperatursensor DS18B20
  22. #define ONE_WIRE_BUS 2
  23. OneWire oneWire(ONE_WIRE_BUS);
  24. DallasTemperature sensors(&oneWire);
  25.  
  26. //Feuchtigkeitssensor AM2320B
  27. Adafruit_AM2320 am2320 = Adafruit_AM2320();
  28.  
  29. //Luftdrucksensor BMP280
  30. Adafruit_BMP280 bme; // I2C
  31.  
  32. //Variablen
  33. int temp, hum, pres;                                      //Werte von Sensoren für Ausgabe
  34. int vent = 24;                                            //Integer für vergleich ab welcher Temperatur das Relais geschaltet werden soll
  35. bool boolTemp = true, boolHum = true, boolPres = true;    //Bool für abfrage ob die Werte angezeigt werden sollen
  36. int lcd_key = 0;                                          //Integer für Wertübergabe von "int read_LCD-buttons für Auswertung per Switch-Anweisung
  37. int adc_key_in = 0;                                       //Integer für Analog wert der vom Tastendruck stammt
  38. long previousMillis = 0;                                  //Vorhergehende Millisekunden nach ausführung der Anweisung (Anweisung für Delay ersatz)
  39. int interval = 750;                                       //Angabe in ms, Interval in der die anweisung ausgeführt wird
  40.  
  41. //Abfrage welcher Button gedrückt wurde mit Rückgabe Wert
  42. int read_LCD_buttons(){
  43.   adc_key_in = analogRead(0);
  44.    
  45.   if (adc_key_in > 1000) return NONE;
  46.   if (adc_key_in < 50)   return RIGHT;
  47.   if (adc_key_in < 150)  return UP;
  48.   if (adc_key_in < 300)  return DOWN;
  49.   if (adc_key_in < 450)  return LEFT;
  50.   if (adc_key_in < 700)  return SELECT;
  51.    
  52.   return NONE;
  53. }
  54.  
  55.  
  56. void setup() {
  57.   lcd.begin(16,2);                    //definiton von Displaygröße
  58.   pinMode(11, OUTPUT);                //Output Pin für Relais
  59.   Serial.begin(9600);                 //Definition von Schrittgeschwindigkeit vom Seriellenmonitor
  60.   Serial.println(F("BMP280 test"));  
  61.  
  62.   if (!bme.begin(0x76)) {  
  63.     Serial.println("Could not find a valid BMP280 sensor, check wiring!");
  64.     while (1);
  65.   }
  66. }
  67.  
  68. void loop() {
  69.   unsigned long currentMillis = millis(); //Variable um die derzeitigen Millisekunden vom System abzugreifen
  70.  
  71.   //Buttons
  72.   lcdkey();
  73.  
  74.   //Temperatursensor
  75.   DS18B20();
  76.  
  77.   //Luftfeuchtigkeitssensor
  78.   AM2320B();
  79.  
  80.   //Luftdrucksensor
  81.   BMP280();
  82.  
  83.   //Displayausgabe
  84.   lcdoutput();
  85.  
  86.   //Delay alternative (Inspiration: https://www.arduino.cc/en/tutorial/BlinkWithoutDelay)
  87.   int subMillis = currentMillis - previousMillis;
  88.   Serial.println(subMillis);
  89.  
  90.   if(subMillis > interval){
  91.     previousMillis = currentMillis; //Übergabe der momentanen Laufzeit des Arduinos
  92.     //Laufschrift nach Links
  93.     for (int positionCounter = 0; positionCounter < 1; positionCounter) {
  94.       lcd.scrollDisplayLeft();
  95.       positionCounter++;
  96.     } //Ende For-Schleife
  97.   } //Ende If-Anweisung
  98.  
  99.   //Anweisung wann Ventilator schalten soll
  100.   if(temp < vent) digitalWrite(11, LOW);
  101.   if(temp > vent) digitalWrite(11, HIGH);
  102.  
  103. } // Ende Void
  104.  
  105. void lcdoutput(){
  106.   lcd.setCursor(0,1);
  107.   //Temperatur Ausgabe
  108.   if(boolTemp==true){
  109.   lcd.print("temp: ");
  110.   lcd.print(temp);
  111.   lcd.print("*C  ");
  112.   }
  113.   //Luftfeuchtigkeits Ausgabe
  114.   if(boolHum==true){
  115.   lcd.print("hum: ");
  116.   lcd.print(hum);
  117.   lcd.print("%  ");
  118.   }
  119.   //Luftdruck Ausgabe
  120.   if(boolPres==true){
  121.   lcd.print("pres: ");
  122.   lcd.print(pres);
  123.   lcd.print("Pa  ");
  124.   }
  125.   //Ausgabe wann Ventilator schaltet
  126.   lcd.setCursor(0,0);
  127.   lcd.print("Vent ab: ");
  128.   lcd.print(vent);
  129.   lcd.print(" C");
  130. }
  131.  
  132. void DS18B20(){
  133.   sensors.requestTemperatures();
  134.   temp = sensors.getTempCByIndex(0);
  135.  
  136.   if(temp== -127){
  137.     temp = am2320.readTemperature();
  138.   } //Ende if Anweisung
  139.  
  140.   Serial.print("Temp: ");
  141.   Serial.print(temp);
  142.   Serial.print("*C");
  143.   Serial.println();
  144. } //Ende Void
  145.  
  146. void AM2320B(){
  147.   hum = am2320.readHumidity();
  148.   Serial.print("hum: ");
  149.   Serial.print(hum);
  150.   Serial.println();
  151. } //Ende Void
  152.  
  153. void BMP280(){
  154.   pres = bme.readPressure();
  155.   Serial.print("Pres: ");
  156.   Serial.print(pres);
  157.   Serial.println(" Pa");
  158. } //Ende Void
  159.  
  160. void lcdkey(){
  161.   lcd_key = read_LCD_buttons();
  162.  
  163.   switch(lcd_key){
  164.     case UP:{
  165.       vent++;
  166.       break;
  167.     } //Ende Case UP
  168.     case DOWN:{
  169.       vent--;
  170.       break;
  171.     } //Ende Case DOWN
  172.   } //Ende Switch-Anweisung
  173.  
  174.   //Output von vent Variable aktualisieren
  175.   lcd.setCursor(0,0);
  176.   lcd.print("Vent ab: ");
  177.   lcd.print(vent);
  178.   lcd.print(" C");
  179. } //Ende Void
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement