#include #include #include float temperature; float humidity; float pressure; int counter=0; float odczyt=0; String znak="<*>"; byte st[8] = { B00110, B00110, B00000, B00000, B00000, B00000, B00000, B00000 }; #define czerwona 10 #define zielona 11 #define niebieska 3 #define ALTITUDE 437.0 // Altitude in Żywiec, Poland Adafruit_BME280 bme; // I2C LiquidCrystal lcd(4, 5, 6, 7, 8, 9); void setup(void) { pinMode(czerwona, OUTPUT); pinMode(zielona, OUTPUT); pinMode(niebieska, OUTPUT); Serial.begin(9600); lcd.createChar(0, st); lcd.begin(16, 2); lcd.print("Odczyt danych"); bool status; // default settings status = bme.begin(0x76); //I2C adres czujnika if (!status) { lcd.clear(); lcd.print("Czujnik nie"); lcd.setCursor(0,1); lcd.print("funkcjonuje"); while (1); } } void loop() { delay(2000); getPressure(); getHumidity(); getTemperature(); lcd.clear(); //Printing Temperature String temperatureString = String(temperature,1); lcd.print("T: "); lcd.print(temperatureString); //lcd.print((char)223); lcd.print((char)0); lcd.print("C "); //Printing Humidity String humidityString = String(humidity,0); lcd.print("W: "); lcd.print(humidityString); lcd.print("%"); //Printing Pressure lcd.setCursor(0,1); lcd.print("C: "); String pressureString = String(pressure,0); if (pressure >= 1000.0) lcd.setCursor(3,1); else lcd.setCursor(4,1); lcd.print(pressureString); lcd.setCursor(8,1); lcd.print("hPa"); lcd.setCursor(13,1); lcd.print(znak); //NIEBIESKA if (pressure > 1020) { digitalWrite(czerwona, LOW); digitalWrite(zielona, LOW); analogWrite(niebieska, 22); } //CZERWONA if (pressure < 990) { analogWrite(czerwona, 22); digitalWrite(zielona, LOW); digitalWrite(niebieska, LOW); } //ZIELONA if ((pressure > 1000) && (pressure <= 1010)) { digitalWrite(czerwona, LOW); analogWrite(zielona, 22); digitalWrite(niebieska, LOW); } //ZIELONA-NIEBIESKA if ((pressure > 1010) && (pressure <= 1020)) { digitalWrite(czerwona, LOW); analogWrite(zielona, 22); analogWrite(niebieska, 22); } //ZIELONA-CZERWONA if ((pressure >= 990) && (pressure <= 1000)) { analogWrite(czerwona, 22); analogWrite(zielona, 22); digitalWrite(niebieska, LOW); } //wyznaczanie trendu counter++; if (counter == 1) {odczyt = pressure;} if (counter == 5400) { // interwał czasowy odczytu: 30 -> 1 minuta, 1800 - 1 godzina, 5400 - 3 godziny itd odczyt = round(odczyt * 100.0) / 100.0; pressure = round(pressure * 100.0) / 100.0; odczyt = pressure - odczyt; Serial.print(" pressure=");Serial.print(pressure); Serial.print(" odczyt=");Serial.print(odczyt); if (odczyt >= -1.0 && odczyt <=1.0) {znak="<->";} if (odczyt < -1.0) {znak="<--";} if (odczyt > 1.0) {znak="-->";} Serial.print(" znak ");Serial.println(znak); counter=0; //zerowanie licznika } } float getTemperature() { temperature = bme.readTemperature(); } float getHumidity() { humidity = bme.readHumidity(); } float getPressure() { pressure = bme.readPressure(); pressure = bme.seaLevelForAltitude(ALTITUDE,pressure); pressure = pressure/100.0F; } //juliusz@lo-zywiec.pl