Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <SPI.h>
- #include <Adafruit_Sensor.h>
- #include <Adafruit_BMP280.h>
- #include <Adafruit_AM2320.h>
- #include <OneWire.h>
- #include <DallasTemperature.h>
- #include <LiquidCrystal.h>
- //LCD
- LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
- //Buttons
- #define RIGHT 0
- #define UP 1
- #define DOWN 2
- #define LEFT 3
- #define SELECT 4
- #define NONE 5
- //Temperatursensor DS18B20
- #define ONE_WIRE_BUS 2
- OneWire oneWire(ONE_WIRE_BUS);
- DallasTemperature sensors(&oneWire);
- //Feuchtigkeitssensor AM2320B
- Adafruit_AM2320 am2320 = Adafruit_AM2320();
- //Luftdrucksensor BMP280
- Adafruit_BMP280 bme; // I2C
- //Variablen
- int temp, hum, pres; //Werte von Sensoren für Ausgabe
- int vent = 24; //Integer für vergleich ab welcher Temperatur das Relais geschaltet werden soll
- bool boolTemp = true, boolHum = true, boolPres = true; //Bool für abfrage ob die Werte angezeigt werden sollen
- int lcd_key = 0; //Integer für Wertübergabe von "int read_LCD-buttons für Auswertung per Switch-Anweisung
- int adc_key_in = 0; //Integer für Analog wert der vom Tastendruck stammt
- long previousMillis = 0; //Vorhergehende Millisekunden nach ausführung der Anweisung (Anweisung für Delay ersatz)
- int interval = 750; //Angabe in ms, Interval in der die anweisung ausgeführt wird
- //Abfrage welcher Button gedrückt wurde mit Rückgabe Wert
- int read_LCD_buttons(){
- adc_key_in = analogRead(0);
- if (adc_key_in > 1000) return NONE;
- if (adc_key_in < 50) return RIGHT;
- if (adc_key_in < 150) return UP;
- if (adc_key_in < 300) return DOWN;
- if (adc_key_in < 450) return LEFT;
- if (adc_key_in < 700) return SELECT;
- return NONE;
- }
- void setup() {
- lcd.begin(16,2); //definiton von Displaygröße
- pinMode(11, OUTPUT); //Output Pin für Relais
- Serial.begin(9600); //Definition von Schrittgeschwindigkeit vom Seriellenmonitor
- Serial.println(F("BMP280 test"));
- if (!bme.begin(0x76)) {
- Serial.println("Could not find a valid BMP280 sensor, check wiring!");
- while (1);
- }
- }
- void loop() {
- unsigned long currentMillis = millis(); //Variable um die derzeitigen Millisekunden vom System abzugreifen
- //Buttons
- lcdkey();
- //Temperatursensor
- DS18B20();
- //Luftfeuchtigkeitssensor
- AM2320B();
- //Luftdrucksensor
- BMP280();
- //Displayausgabe
- lcdoutput();
- //Delay alternative (Inspiration: https://www.arduino.cc/en/tutorial/BlinkWithoutDelay)
- int subMillis = currentMillis - previousMillis;
- Serial.println(subMillis);
- if(subMillis > interval){
- previousMillis = currentMillis; //Übergabe der momentanen Laufzeit des Arduinos
- //Laufschrift nach Links
- for (int positionCounter = 0; positionCounter < 1; positionCounter) {
- lcd.scrollDisplayLeft();
- positionCounter++;
- } //Ende For-Schleife
- } //Ende If-Anweisung
- //Anweisung wann Ventilator schalten soll
- if(temp < vent) digitalWrite(11, LOW);
- if(temp > vent) digitalWrite(11, HIGH);
- } // Ende Void
- void lcdoutput(){
- lcd.setCursor(0,1);
- //Temperatur Ausgabe
- if(boolTemp==true){
- lcd.print("temp: ");
- lcd.print(temp);
- lcd.print("*C ");
- }
- //Luftfeuchtigkeits Ausgabe
- if(boolHum==true){
- lcd.print("hum: ");
- lcd.print(hum);
- lcd.print("% ");
- }
- //Luftdruck Ausgabe
- if(boolPres==true){
- lcd.print("pres: ");
- lcd.print(pres);
- lcd.print("Pa ");
- }
- //Ausgabe wann Ventilator schaltet
- lcd.setCursor(0,0);
- lcd.print("Vent ab: ");
- lcd.print(vent);
- lcd.print(" C");
- }
- void DS18B20(){
- sensors.requestTemperatures();
- temp = sensors.getTempCByIndex(0);
- if(temp== -127){
- temp = am2320.readTemperature();
- } //Ende if Anweisung
- Serial.print("Temp: ");
- Serial.print(temp);
- Serial.print("*C");
- Serial.println();
- } //Ende Void
- void AM2320B(){
- hum = am2320.readHumidity();
- Serial.print("hum: ");
- Serial.print(hum);
- Serial.println();
- } //Ende Void
- void BMP280(){
- pres = bme.readPressure();
- Serial.print("Pres: ");
- Serial.print(pres);
- Serial.println(" Pa");
- } //Ende Void
- void lcdkey(){
- lcd_key = read_LCD_buttons();
- switch(lcd_key){
- case UP:{
- vent++;
- break;
- } //Ende Case UP
- case DOWN:{
- vent--;
- break;
- } //Ende Case DOWN
- } //Ende Switch-Anweisung
- //Output von vent Variable aktualisieren
- lcd.setCursor(0,0);
- lcd.print("Vent ab: ");
- lcd.print(vent);
- lcd.print(" C");
- } //Ende Void
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement