smi1100
Published © GPL3+

it's getting hotter - use the arduino thermometer

An Arduino-based indoor air quality measuring instrument (temperature, humidity, air quality) with two "old style" voltmeters.

IntermediateFull instructions provided941
it's getting hotter - use the arduino thermometer

Things used in this project

Hardware components

Arduino Mega 2560
Arduino Mega 2560
×1
DHT22 Temperature Sensor
DHT22 Temperature Sensor
×1
DS18B20 Programmable Resolution 1-Wire Digital Thermometer
Maxim Integrated DS18B20 Programmable Resolution 1-Wire Digital Thermometer
×1
Resistor 220 ohm
Resistor 220 ohm
×6
Resistor 4.75k ohm
Resistor 4.75k ohm
×1
Resistor 10k ohm
Resistor 10k ohm
×1
Voltmeter analog
×2
Grove - Air quality sensor v1.3
Seeed Studio Grove - Air quality sensor v1.3
×1
Graphic OLED, 128 x 128
Graphic OLED, 128 x 128
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
3D Printer (generic)
3D Printer (generic)
Laser cutter (generic)
Laser cutter (generic)

Story

Read more

Custom parts and enclosures

front side

backside

display voltmeter

Schematics

PCB

Code

Air Quality - arduino code

Arduino
/* 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");    
}

Credits

smi1100
3 projects • 2 followers

Comments