/* Air quality sensor
by smi1100 - 06/16/2022
My third project. The following components are needed:
- Arduino Mega
- OLED display (in my case waveshare - 128x128, General 1.5inch OLED display module)
- two RGB-LED and 6 220 Ohm resistors
- 2 Voltmeter (in my case 5 Volt Voltmeter 85C1)
- 1 push button momentary
- air quality sensor (in my case Grove - Air Quality Sensor v1.3)
- DS3231 real time clock
- DHT22 sensor (measuring humidity)
- DS18B20 sensor (measuring temperature) and a resistor 4,7K Ohm
- bread board
- casing
*/
/* module 0 - Arduino Mega --------------------------------------------------------------------- */
#include <Arduino.h>
#include <SPI.h> // library for the serial bus
/* module 1 - OLED Display ----------------------------------------------------------------
List of fonds https://github.com/olikraus/u8g2/wiki/fntlist8x8 */
#include <U8x8lib.h> // library necessary to display text on the oled display
U8X8_SSD1327_WS_128X128_4W_SW_SPI u8x8(/* clock=*/ 32, /* data=*/ 34, /* cs=*/ 30, /* dc=*/ 28, /* reset=*/ 26);
// change the pages of the OLED display without using delay
int Seite = 0;
int Zeit_auf_Seite = 7000;
unsigned long aktuelleZeit;
unsigned long letzterZustandsWechsel;
/* description of the variables
Seite - pagenumber of the oled-display
Zeit_auf_Seite - time to change to the next page on the oled display
wait without using delay
aktuelleZeit
letzterZustandswechsel
*/
// module 2 - real time clock ---------------------------------------------------------------------
#include "RTClib.h" // library for the real time clock (RTC)
RTC_DS3231 rtc; // RTC - from left to right - GND, VCC, SDA (Mega - 20, Uno - A4), SCL (Mega - 21, Uno - A5) - input voltage of the RTC - 3.3 or 5V
char daysOfTheWeek[7][12] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerst.", "Freitag", "Samstag"};
// in english char weekday[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
String day, month, hour, minute;
String weekday;
// module 3 - DS18B20 sensor -----------------------------------------------------------------
#include <OneWire.h> // library for the 1-wire
#include <DallasTemperature.h> // digital, serial bus from the manufacturer Maxim (former Dallas)
#define ONE_WIRE_BUS 22 // connection to digital PIN 22 - input voltage of the sensor - 3.3 or 5V
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensor(&oneWire);
// module 4 - air quality sensor ------------------------------------------------------------
#include "Air_Quality_Sensor.h"
AirQualitySensor sensore(A0); // connection to analog PIN A0 - - input voltage of the sensor - 3.3 or 5V
// module 5 - EEPROM Arduino --------------------------------------------------------------
#include <EEPROM.h>
float t = 20; // current temperature - when switching on set to 20 C
float t_diff; // difference between t and t_vorher
String positiv = "+"; // If the difference is positive, a "+" sign is added
// save the data after turning on
float t_vorher = 15; // temperature - in this example - 1 hour ago (change with variable Bezugsgre)
int t_vorher_adress = 280;
float bezugsgroesse = 3600000; // Bezugsgre in milli seconds -> 1000 milliseconds * 60 sek * 60 min = 3.600.000 msek (1 hour)
unsigned long letzterZustandsWechselA;
unsigned long aktuelleZeitA;
// initial values of Tmax and Tmin are chosen so that they are overwritten on the first run
float t_max = 10.99;
float t_min = 39.99;
int t_max_adress = 0;
int t_min_adress = 50;
// save that time with T maximun
String t_max_hour = "12";
int t_max_hour_adress = 100;
String t_max_minute = "12";
int t_max_minute_adress = 120;
String t_max_day = "12";
int t_max_day_adress = 140;
String t_max_month = "12";
int t_max_month_adress = 160;
// save that time with T minimum
String t_min_hour = "12";
int t_min_hour_adress = 180;
String t_min_minute = "12";
int t_min_minute_adress = 200;
String t_min_day = "12";
int t_min_day_adress = 220;
String t_min_month = "12";
int t_min_month_adress = 240;
// module 6 - Voltmeter temperature --------------------------------------------------------
int Voltmeter_Temp_PIN = 2; //PWM PIN
int MIN_TEMP = 20;
int MAX_TEMP = 35;
int RANGE_TEMP = MAX_TEMP - MIN_TEMP;
int voltage_temp; // 0 - 255 -> variable for the both voltmeter
int temp; // temp = 100 * t
// module 7 - RGB LED Voltmeter -------------------------------------------------------------
// Do not connect the GND of the LED to the same GND of the voltmeter -> changes the values on the voltmeter
int ledrot_temp=4; //PWM PIN
int ledblau_temp=5; //PWM PIN
int ledgruen_temp=6; //PWM PIN
// module 8 - DHT 22 ------------------------------------------------------------------------
#include "DHT.h"
#define DHT22PIN 24 // connection to digital PIN 24 - input voltage of the sensor - 3.3 or 5V
#define DHT22TYPE DHT22
DHT dht22(DHT22PIN, DHT22TYPE);
float humidity;
float temperature_dht22; // compare values with DS18B20
// module 9 - Voltmeter hygrometer -----------------------------------------------------------------
int Voltmeter_Hygro_PIN = 3; //PWM PIN
int MIN_Hygro = 20;
int MAX_Hygro = 35;
int RANGE_Hygro = MAX_Hygro - MIN_Hygro;
int voltage_Hygro;
// module 10 - RGB LED Voltmeter
// Do not connect the GND of the LED to the same GND of the voltmeter -> changes the values on the voltmeter
int ledrot_hygro=7; //PWM PIN
int ledblau_hygro=8; //PWM PIN
int ledgruen_hygro=9; //PWM PIN
// module 11 - momentary button display
const int buttonPin = 36;
int buttonState = 0;
void setup()
{
Serial.begin(9600);
Serial.println("+++++++++++++++++++ SETUP +++++++++++++++++++");Serial.println("");
// OLED Display --------------------------------------------------------------
u8x8.begin(); // input voltage of the display - 3.3 or 5V
Serial.println("OLED Display ready");Serial.println("");
// real time clock -------------------------------------------------------------------
if (! rtc.begin()) // Check if RTC is connected correctly:
{
Serial.println("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) // Check if the RTC lost power and if so, set the time:
{
Serial.println("RTC lost power, lets set the time!");
// The following line sets the RTC to the date & time this sketch was compiled:
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
//rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
Serial.println("RTC ready"); Serial.println("");
// Temp. sensor --------------------------------------------------------------
sensor.begin();
Serial.print("Temperatursensor - DS 18B20 - Anzahl Sensoren: ");
Serial.println(sensor.getDeviceCount());
Serial.println("Sensor DS 18B20 ready"); Serial.println("");
// Air quality sensor ------------------------------------------------------------
while (!Serial);
u8x8.clear();
u8x8.setFont(u8x8_font_7x14_1x2_r);
u8x8.setCursor(3,6);
u8x8.print("Booting ...");
Serial.println("Luftgtesensor - Waiting sensor to init (10 sek)...");
delay(10000);
if (sensore.init())
{
Serial.println("Sensor Luftgte ready");
Serial.println("");
}
else
{
Serial.println("Sensor Luftgte ERROR!");
Serial.println("");
}
// EEPROM --------------------------------------------------------------------
EEPROM.put(t_min_adress, t_min);
Serial.print("MIN Initial aus EEPROM (adress - value): "); Serial.print(t_min_adress); Serial.print(" - "); Serial.println(t_min);
EEPROM.put(t_max_adress, t_max);
Serial.print("MAX Initial aus EEPROM (adress - value): "); Serial.print(t_max_adress); Serial.print(" - "); Serial.println(t_max);Serial.println("");
// VOLTMETER temperature und humidity -----------------------------------------------------------------
// Test accuracy of voltmeter - calibrate with adjusting screw if necessary
int MIN = 0;
int MAX = 255;
analogWrite(Voltmeter_Temp_PIN, MIN);
analogWrite(Voltmeter_Hygro_PIN, MIN);
Serial.println("Voltmeter Teilstrich 0");
delay(2000);
analogWrite(Voltmeter_Temp_PIN, MAX*1/5);
analogWrite(Voltmeter_Hygro_PIN, MAX*1/5);
Serial.println("Voltmeter Teilstrich 1");
delay(2000);
analogWrite(Voltmeter_Temp_PIN, MAX*2/5);
analogWrite(Voltmeter_Hygro_PIN, MAX*2/5);
Serial.println("Voltmeter Teilstrich 2");
delay(2000);
analogWrite(Voltmeter_Temp_PIN, MAX*3/5);
analogWrite(Voltmeter_Hygro_PIN, MAX*3/5);
Serial.println("Voltmeter Teilstrich 3");
delay(2000);
analogWrite(Voltmeter_Temp_PIN, MAX*4/5);
analogWrite(Voltmeter_Hygro_PIN, MAX*4/5);
Serial.println("Voltmeter Teilstrich 4");
delay(2000);
analogWrite(Voltmeter_Temp_PIN, MAX*5/5);
analogWrite(Voltmeter_Hygro_PIN, MAX*5/5);
Serial.println("Voltmeter Teilstrich 5");
delay(2000);
analogWrite(Voltmeter_Temp_PIN, MIN);
analogWrite(Voltmeter_Hygro_PIN, MIN);
Serial.println("Voltmeter Teilstrich 0");Serial.println("");
Serial.println("Voltmeter ready");Serial.println("");
// RGB LED ------------------------------------------------------------------------
analogWrite(ledrot_temp,255);analogWrite(ledrot_hygro,255);
analogWrite(ledblau_temp,0);analogWrite(ledblau_hygro,0);
analogWrite(ledgruen_temp,0);analogWrite(ledgruen_hygro,0);
Serial.println("LED Farbe rot");
delay (2000);
analogWrite(ledrot_temp,0);analogWrite(ledrot_hygro,0);
analogWrite(ledblau_temp,255);analogWrite(ledblau_hygro,255);
analogWrite(ledgruen_temp,0);analogWrite(ledgruen_hygro,0);
Serial.println("LED Farbe blau");
delay (2000);
analogWrite(ledrot_temp,0);analogWrite(ledrot_hygro,0);
analogWrite(ledblau_temp,0);analogWrite(ledblau_hygro,0);
analogWrite(ledgruen_temp,255);analogWrite(ledgruen_hygro,255);
Serial.println("LED Farbe grn");
delay (2000);
analogWrite(ledrot_temp,0);analogWrite(ledrot_hygro,0);
analogWrite(ledblau_temp,0);analogWrite(ledblau_hygro,0);
analogWrite(ledgruen_temp,0);analogWrite(ledgruen_hygro,0);
delay (2000);
Serial.println("LED ready");Serial.println("");
// Hygrometer ------------------------------------------------------------------------
dht22.begin();
Serial.println("DHT22 ready");Serial.println("");
// Taster ----------------------------------------------------------------------------
pinMode(buttonPin, INPUT_PULLUP);
}
void loop()
{
// Display
buttonState = digitalRead(buttonPin);
if (buttonState == LOW)
{
//Serial.println("Display Schalter ON");
u8x8.setPowerSave(0);
}
else
{
//Serial.println("Display Schalter OFF");
u8x8.setPowerSave(1);
}
aktuelleZeit = millis();
if(aktuelleZeit - letzterZustandsWechsel > Zeit_auf_Seite)
{
letzterZustandsWechsel = aktuelleZeit;
switch (Seite)
{
case 0: page1();break;
case 1: page2();break;
case 2: page3();break;
case 3: page4();break;
case 4: page5();break;
case 5: page6();break;
}
Seite++;
if (Seite>5) {Seite = 0; }
}
}
void page1()
{
// OLED Display - date and weekday
Serial.println("");
Serial.println("Page 1 - Datum und Wochentag");
DateTime now = rtc.now(); // Get current date and time:
if (now.day() < 10) {day = String(0) + String(now.day());} else {day = now.day();}
if (now.month() < 10) {month = String("0") + String(now.month());} else {month = now.month();}
weekday = String(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print("Datum: "); Serial.print(day); Serial.print("."); Serial.println(month);
u8x8.clear();
u8x8.setFont(u8x8_font_profont29_2x3_f);
u8x8.setCursor(3,6);
u8x8.print(day);
u8x8.drawString(7,6,".");
u8x8.setCursor(9,6);
u8x8.print(month);
u8x8.setCursor(4,11);
u8x8.setFont(u8x8_font_7x14_1x2_r);
u8x8.print(weekday);
}
void page2 ()
{
// OLED display - time
Serial.println("");
Serial.println("Page 2 - Uhrzeit");
DateTime now = rtc.now(); // Get current date and time:
if (now.hour() < 10) {hour = String("0") + String(now.hour());} else {hour = now.hour();}
if (now.minute() < 10) {minute = String("0") + String(now.minute()); }else {minute = now.minute();}
Serial.print("Zeit: "); Serial.print(hour); Serial.print(":"); Serial.println(minute);
u8x8.clear();
u8x8.setFont(u8x8_font_profont29_2x3_f);
u8x8.setCursor(3,7);
u8x8.print(hour);
u8x8.drawString(7,7,":");
u8x8.setCursor(9,7);
u8x8.print(minute);
}
void page3()
{
// OLED display - temperature difference
Serial.println("");
Serial.println("Page 3 - Temperaturdifferenz");
// save status before
aktuelleZeitA = millis();
Serial.print("aktuelle Zeit = "); Serial.print(aktuelleZeitA/1000/60); Serial.print(" min. - ");
Serial.print("neuer Bezugszeitraum nach = X * "); Serial.print(bezugsgroesse/1000/60); Serial.println(" min.");
if(aktuelleZeitA - letzterZustandsWechselA > bezugsgroesse)
{
letzterZustandsWechselA = aktuelleZeitA;
Serial.println("********** Temp vor einer Stunde NEUER WERT **********");
t_vorher = sensor.getTempCByIndex(0);
EEPROM.put(t_vorher_adress, t_vorher);
Serial.print("Temp vor einer Stunde NEU: "); Serial.print(t_vorher_adress); Serial.print(" - "); Serial.print(t_vorher);Serial.println(" C");Serial.println("");
}
// compare two sensors (DHT22 <> DS18B20)
sensor.requestTemperatures();
t = sensor.getTempCByIndex(0);
temperature_dht22 = dht22.readTemperature();
Serial.print("Differenz = DS18B20: ");Serial.print(t); Serial.print(" C <> DHT22: "); Serial.print(temperature_dht22); Serial.print(" C = "); Serial.print(t-temperature_dht22); Serial.println(" C ");
// Tem. sensor DS18B20 --------------------------------------------------------------
Serial.print("DS18B20 - Temp.: "); Serial.print(t);Serial.print(" C");Serial.print(" -> ");
// Voltmeter Temp ----------------------------------------------------------------------
if (t <= 20)
{
voltage_temp = 0;
analogWrite(Voltmeter_Temp_PIN,voltage_temp);
Serial.println("Temperatur <= 20 C --> Farbe blau");
analogWrite(ledrot_temp,0);
analogWrite(ledblau_temp,255);
analogWrite(ledgruen_temp,0);
}
if (t > 20 && t < 28)
{
temp = 100 * t;
voltage_temp = (temp-(MIN_TEMP*100))/RANGE_TEMP*255/100;
analogWrite(Voltmeter_Temp_PIN,voltage_temp);
Serial.println("Temperatur > 20 C & < 28 C --> keine Farbe");
analogWrite(ledrot_temp,0);
analogWrite(ledblau_temp,0);
analogWrite(ledgruen_temp,0);
}
if (t > 28 && t < 35)
{
temp = 100 * t;
voltage_temp = (temp-(MIN_TEMP*100))/RANGE_TEMP*255/100;
analogWrite(Voltmeter_Temp_PIN,voltage_temp);
Serial.println("Temperatur > 28 C & <= 35C --> Farbe rot");
analogWrite(ledrot_temp,255);
analogWrite(ledblau_temp,0);
analogWrite(ledgruen_temp,0);
}
if (t > 35)
{
voltage_temp = 255;
analogWrite(Voltmeter_Temp_PIN,voltage_temp);
Serial.println("Temperatur > 35 C --> Farbe rot");
analogWrite(ledrot_temp,255);
analogWrite(ledblau_temp,0);
analogWrite(ledgruen_temp,0);
}
// OLED Display - temperature
u8x8.clear();
t_vorher = EEPROM.put(t_vorher_adress, t_vorher); // LSCHEN
t_diff = t - t_vorher;
Serial.print("Temp.differenz: "); Serial.print(t_diff);Serial.print(" = "); Serial.print(t);Serial.print(" - "); Serial.println(t_vorher);
if (t_diff >= 0)
{
u8x8.setFont(u8x8_font_7x14_1x2_r);
u8x8.setCursor(3,10);
u8x8.print(positiv);
Serial.print("Vorzeichen= "); Serial.println(positiv);
}
else
{
Serial.print("Vorzeichen= "); Serial.println("negativ");
}
u8x8.setFont(u8x8_font_profont29_2x3_f);
u8x8.setCursor(2,4);
u8x8.print(t);
u8x8.drawString(10,4," C");
u8x8.setFont(u8x8_font_7x14_1x2_r);
u8x8.setCursor(5,10);
u8x8.print(t_diff);
u8x8.drawString(9,10," C");
u8x8.drawString(0,13,"gg. Stunde davor");
}
void page4()
{
Serial.println("");
Serial.println("Page 4 - Temp. MAX und MIN");
// OLED Display - temperature MAX, MIN
if (t > (EEPROM.get(t_max_adress, t_max)))
{
Serial.println ("********** EEPROM-Wert MAX Korrektur **********");
Serial.print ("alter EEPROM-Wert MAX: "); Serial.println(EEPROM.get(t_max_adress, t_max));
t_max = t;
EEPROM.put(t_max_adress, t_max);
Serial.print ("neuer EEPROM-Wert MAX: "); Serial.println(EEPROM.get(t_max_adress, t_max));
t_max_hour = hour;
EEPROM.put(t_max_hour_adress, t_max_hour);
t_max_minute = minute;
EEPROM.put(t_max_minute_adress, t_max_minute);
t_max_day = day;
EEPROM.put(t_max_day_adress, t_max_day);
t_max_month = month;
EEPROM.put(t_max_month_adress, t_max_month);
Serial.print ("neuer EEPROM-Wert MAX_Time: ");
Serial.print(EEPROM.get(t_max_day_adress, t_max_day));
Serial.print(".");
Serial.print(EEPROM.get(t_max_month_adress, t_max_month));
Serial.print(" ");
Serial.print(EEPROM.get(t_max_hour_adress, t_max_hour));
Serial.print(":");
Serial.println(EEPROM.get(t_max_minute_adress, t_max_minute));
}
else
{
Serial.println ("kein neuer EEPROM-Wert MAX_Time");
}
if (t < (EEPROM.get(t_min_adress, t_min)) && t > 1) // Avoid measuring errors (-127 C) of the sensor when displaying the minimum temperature
{
Serial.println ("********** EEPROM-Wert MIN Korrektur **********");
Serial.print ("alter EEPROM-Wert MIN: "); Serial.println(EEPROM.get(t_min_adress, t_min));
t_min = t;
EEPROM.put(t_min_adress, t_min);
Serial.print ("neuer EEPROM-Wert MIN: "); Serial.println(EEPROM.get(t_min_adress, t_min));
t_min_hour = hour;
EEPROM.put(t_min_hour_adress, t_min_hour);
t_min_minute = minute;
EEPROM.put(t_min_minute_adress, t_min_minute);
t_min_day = day;
EEPROM.put(t_min_day_adress, t_min_day);
t_min_month = month;
EEPROM.put(t_min_month_adress, t_min_month);
Serial.print ("neuer EEPROM-Wert MIN_Time: ");
Serial.print(EEPROM.get(t_min_day_adress, t_min_day));
Serial.print(".");
Serial.print(EEPROM.get(t_min_month_adress, t_min_month));
Serial.print(" ");
Serial.print(EEPROM.get(t_min_hour_adress, t_min_hour));
Serial.print(":");
Serial.println(EEPROM.get(t_min_minute_adress, t_min_minute));
}
else
{
Serial.println ("kein neuer EEPROM-Wert MIN_Time");
}
u8x8.clear();
u8x8.setFont(u8x8_font_7x14_1x2_r);
u8x8.drawString(0,2,"Temp.MAX");
u8x8.setCursor(2,4); u8x8.print(EEPROM.get(t_max_adress, t_max)); u8x8.drawString(6,4," C");
u8x8.setCursor(2,6); u8x8.print(EEPROM.get(t_max_day_adress, t_max_day));
u8x8.drawString(4,6,".");
u8x8.setCursor(5,6); u8x8.print(EEPROM.get(t_max_month_adress, t_max_month));
u8x8.drawString(7,6," ");
u8x8.setCursor(8,6); u8x8.print(EEPROM.get(t_max_hour_adress, t_max_hour));
u8x8.drawString(10,6,":");
u8x8.setCursor(11,6); u8x8.print(EEPROM.get(t_max_minute_adress, t_max_minute));
u8x8.drawString(0,9,"Temp.MIN");
u8x8.setCursor(2,11); u8x8.print(EEPROM.get(t_min_adress, t_min)); u8x8.drawString(6,11," C");
u8x8.setCursor(2,13); u8x8.print(EEPROM.get(t_min_day_adress, t_min_day));
u8x8.drawString(4,13,".");
u8x8.setCursor(5,13); u8x8.print(EEPROM.get(t_min_month_adress, t_min_month));
u8x8.drawString(7,13," ");
u8x8.setCursor(8,13); u8x8.print(EEPROM.get(t_min_hour_adress, t_min_hour));
u8x8.drawString(10,13,":");
u8x8.setCursor(11,13); u8x8.print(EEPROM.get(t_min_minute_adress, t_min_minute));
}
void page5()
{
Serial.println("");
Serial.println("Page 5 - Luftfeuchte");
// Voltmeter Hygrometer
humidity = dht22.readHumidity();
Serial.print("DHT22 - Feuchtigkeit: "); Serial.print(humidity);Serial.print(" % - ");
voltage_Hygro = humidity*255/100;
analogWrite(Voltmeter_Hygro_PIN,voltage_Hygro);
if (humidity >80 || humidity <20)
{
Serial.println("Feuchtigkeit <20 oder >80 --> rot");
analogWrite(ledrot_hygro,255);
analogWrite(ledblau_hygro,0);
analogWrite(ledgruen_hygro,0);
}
if (humidity <80 || humidity >20)
{
Serial.println("Feuchtigkeit zw. 20 und 80 --> keine Farbe");
analogWrite(ledrot_hygro,0);
analogWrite(ledblau_hygro,0);
analogWrite(ledgruen_hygro,0);
}
// Display Hygrometer
u8x8.clear();
u8x8.setFont(u8x8_font_7x14_1x2_r);
u8x8.drawString(3,2,"Luftfeuchte");
u8x8.setCursor(5,5); u8x8.print(humidity);
u8x8.drawString(11,5,"%");
u8x8.setCursor(4,8); u8x8.print("zu feucht");
u8x8.setCursor(4,10); u8x8.print("normal");
u8x8.setCursor(4,12); u8x8.print("zu trocken");
int x = 8;
if (humidity > 65)
{
x = x+0;
}
else if (humidity > 40 && humidity < 65)
{
x = x+2;
}
else if (humidity < 40)
{
x = x+4;
}
u8x8.setCursor(2,x); u8x8.print("X");
}
void page6()
{
Serial.println("");
Serial.println("Page 6 - Luftqualitt");
// air quality
Serial.print("Grove Air quality - Luftguete: ");
Serial.println(sensore.slope());
u8x8.clear();
u8x8.setFont(u8x8_font_7x14_1x2_r);
u8x8.drawString(3,2,"Luftguete");
u8x8.setCursor(4,6); u8x8.print("ALARM!");
u8x8.setCursor(4,8); u8x8.print("Schlecht");
u8x8.setCursor(4,10); u8x8.print("Mittel");
u8x8.setCursor(4,12); u8x8.print("Frischluft");
int x = 6;
if (sensore.slope() == 0)
{
x = x+0;
Serial.println("Air Quality: ALARM!");
}
else if (sensore.slope() == 1)
{
x = x+2;
Serial.println("Air Quality: Schlecht");
}
else if (sensore.slope() == 2)
{
x = x+4;
Serial.println("Air Quality: Mittel");
}
else if (sensore.slope() == 3)
{
x = x+6;
Serial.println("Air Quality: Frischluft");
}
u8x8.setCursor(2,x); u8x8.print("X");
}
Comments