SHARE
TWEET

IT_Projekt_Wetterstation_YannickFuchs

YannickF Mar 20th, 2019 61 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top