Forum Électro-Bidouilleur

Merci de vous connecter ou de vous inscrire.

Connexion avec identifiant, mot de passe et durée de la session
Recherche avancée  

Nouvelles:

Le Forum est maintenant chiffré (préambule https). Bien sûr, des liens externes insérés dans les sujets vont demeurer inchangés. Mais la composition des pages du Forum est désormais sécurisée. Si des problèmes d'affichage surviennent, veillez à vider votre cache pour ce site.

Auteur Sujet: Qualité de l'air ( STM32 & MQ Sensor v1.2 )  (Lu 2789 fois)

Manu

  • Newbie
  • *
  • Messages: 36
    • Voir le profil
Qualité de l'air ( STM32 & MQ Sensor v1.2 )
« le: septembre 27, 2020, 06:02:07 pm »

Bonjour,

Je voudrais partager avec vous cette bidouille sur STM32 pour mesurer la qualité de l'air.
En espèrant que cela vous sera utile.

Codes Disponibles:
V1.0 Affichages des valeurs analog
V1.1 Affichages des valeurs analog + Alerte des limites établies 04-10-2020
V1.2 Affichages des valeurs analog + Alerte des limites établies + Dimming Oled  10-10-2020

Erreur de conception:
DHT22--> Je vous conseille de le situé plus à  l'éxterieur !



PIN:
 ( Attention "Not 5V Tolerant" du STM32 diviseur de tension pour 3.3v max "exemple 47k+68k & 220k = 3.28v" )

A0 - Sensor MQ3  ( Alcohol )                [ Alcohol, Benzine, CH4, Hexane, LPG, CO ]
A1 - Sensor MQ4  ( CH4 )                     [ LPG, CH4, H2, CO, Alcohol, Smoke ]
A2 - Sensor MQ5  ( LPG & CH4 )           [ H2, LPG, CH4, CO, Alcohol ]
A3 - Sensor MQ6  ( CH4 & LPG )           [ LPG, H2, Ch4, C), Alcohol ]
A4 - Sensor MQ9  ( CH4 & CO )            [ LPG, CO, CH4 ]
A5 - Sensor MQ8  ( H2 & Alcohol )        [ H2, LPG, CH4, CO, Alcohol ]
A6 - Sensor MQ135( NH4 Aire Quality ) [ CO2, CO, NH4,  NH3, Toluene ]
A7 - Sensor MQ2  ( Propane & H2 )       [ H2, LPG, CH4, CO, Alcohol, Propane ]
B0 - Sensor MQ7  ( H2 & CO )              [ CO, H2, LPG, CH4, Alcohol ]
B1 - LDR         ( LDR GL5528 )
B6 - OLED SCL    ( OLED 1.3' 4P SH1106 I2C 128x64 )
B7 - OLED SDA
B8 - DHT22       ( Data TX -> RX avec pullup 10k)
B12- MicroSD cs  ( MicroSD SPI )
B13- MicroSD sck
B14- MicroSD miso
B15- MicroSD mosi



CODES:
 :o  j'ai essayé de faire le plus simple possible

V1.0 Affichages des valeurs analogiques
        Résumé:   u8g2.clearBuffer();
                        u8g2.setFont(u8g2_font_haxrcorp4089_tr);
                        u8g2.setCursor(0,10);
                        u8g2.print("MQ3");
                        u8g2.setCursor(33,10);
                        u8g2.print(analogRead(PA0));
                        u8g2.setCursor(64,10);
                        u8g2.setFont(u8g2_font_haxrcorp4089_tr);
                        u8g2.print("/ ");
                        u8g2.print(analogRead(PA1));
                        u8g2.setCursor(104,10);
                        u8g2.print("MQ4");
                        u8g2.sendBuffer();
// http://forum.bidouilleur.ca/
// v1.0 AirQ Analog Value

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <DHT.h>
#define DHTPIN PB8
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

void setup(void) {
  u8g2.begin();
  dht.begin();
}

void loop(void) {

  // Pour la temperature en Celsius
  //    float t = dht.readTemperature();

  // Pour la temperature en Fahrenheit (isFahrenheit = true)
  //    float t = dht.readTemperature(true);

  float h = dht.readHumidity();
  float t = dht.readTemperature();

  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,10);
  u8g2.print("MQ3");
  u8g2.setCursor(33,10);
  u8g2.print(analogRead(PA0));
  u8g2.setCursor(64,10);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PA1));
  u8g2.setCursor(104,10);
  u8g2.print("MQ4");
 
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,20);
  u8g2.print("MQ5");
  u8g2.setCursor(33,20);
  u8g2.print(analogRead(PA2));
  u8g2.setCursor(64,20);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ "); 
  u8g2.print(analogRead(PA3));
  u8g2.setCursor(104,20);
  u8g2.print("MQ6");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,30);
  u8g2.print("MQ9");
  u8g2.setCursor(33,30);
  u8g2.print(analogRead(PA4));
  u8g2.setCursor(64,30);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PA5));
  u8g2.setCursor(104,30);
  u8g2.print("MQ8");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,40);
  u8g2.print("ArQ");
  u8g2.setCursor(33,40); 
  u8g2.print(analogRead(PA6)); 
  u8g2.setCursor(64,40);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PA7));
  u8g2.setCursor(104,40);
  u8g2.print("MQ2");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,50);
  u8g2.print("MQ7");
  u8g2.setCursor(33,50); 
  u8g2.print(analogRead(PB0));
  u8g2.setCursor(64,50);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PB1));
  u8g2.setCursor(104,50);
  u8g2.print("LDR");
 
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,60);
  u8g2.print("Hum");
  u8g2.setCursor(33,60); 
  u8g2.print(h);
  u8g2.setCursor(64,60);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(t);
  u8g2.setCursor(104,60);
  u8g2.print("Temp");
 
  u8g2.sendBuffer();
  delay(1000);

}

V1.1 Affichages des valeurs analogiques + Alerte quand les limites établies sont dépassées 04-10-2020
        Résumé:   if (analogRead(PinMQ2) >LimitMQ2) {
                           u8g2.clearBuffer();
                           u8g2.setFont(u8g2_font_logisoso32_tf);
                           u8g2.setCursor(0,32);
                           u8g2.print(MsgMQ2);
                           u8g2.setCursor(0,64);
                           u8g2.print(analogRead(PinMQ2));
                           u8g2.sendBuffer();
// http://forum.bidouilleur.ca/
// v1.1 AirQ  Alert
// Merci a papyblue

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <DHT.h>
#define DHTPIN PB8
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

// Menssage Alert
char MsgMQ2[]= "PropH2";
char MsgMQ3[] = "Alcoh.";
char MsgMQ4[] = "CH4";
char MsgMQ5[] = "LPGch4";
char MsgMQ6[] = "CH4lpg";
char MsgMQ7[] = "H2 CO";
char MsgMQ8[] = "H2 Alc";
char MsgMQ9[] = "CH4 CO";
char MsgMQ135[] = "AirQ";
char MsgHum[] = "HUMID.";
char MsgTemp[] = "TEMP.";
// analogRead(Pin Read Pin
int PinMQ2 = PA7;
int PinMQ3 = PA0;
int PinMQ4 = PA1;
int PinMQ5 = PA2;
int PinMQ6 = PA3;
int PinMQ7 = PB0;
int PinMQ8 = PA5;
int PinMQ9 = PA4;
int PinMQ135 = PA6;
int PinLDR = PB1;
// Limits Definied by User
int LimitMQ2 = 70;
int LimitMQ3 = 70;
int LimitMQ4 = 70;
int LimitMQ5 = 45;
int LimitMQ6 = 50;
int LimitMQ7 = 35;
int LimitMQ8 = 18;
int LimitMQ9 = 35;
int LimitMQ135 = 13;
int LimitSupHum = 75;
int LimitInfHum = 40;
int LimitSupTemp = 27;
int LimitInfTemp = 17;

void setup(void) {
  u8g2.begin();
  dht.begin();
}

void AllValue(){
  /* Display show
   MQ2 --- MQ7
   MQ3 --- MQ8
   MQ4 --- MQ9
   MQ5 --- MQ135
   MQ6 --- LDR
   HUM --- TEMP
   */
u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,10);
  u8g2.print("MQ2");
  u8g2.setCursor(33,10);
  u8g2.print(analogRead(PinMQ2));
  u8g2.setCursor(64,10);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinMQ7));
  u8g2.setCursor(104,10);
  u8g2.print("MQ7");
 
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,20);
  u8g2.print("MQ3");
  u8g2.setCursor(33,20);
  u8g2.print(analogRead(PinMQ3));
  u8g2.setCursor(64,20);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinMQ8));
  u8g2.setCursor(104,20);
  u8g2.print("MQ8");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,30);
  u8g2.print("MQ4");
  u8g2.setCursor(33,30);
  u8g2.print(analogRead(PinMQ4));
  u8g2.setCursor(64,30);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinMQ9));
  u8g2.setCursor(104,30);
  u8g2.print("MQ9");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,40);
  u8g2.print("MQ5");
  u8g2.setCursor(33,40);
  u8g2.print(analogRead(PinMQ5));
  u8g2.setCursor(64,40);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinMQ135));
  u8g2.setCursor(104,40);
  u8g2.print("MQ135");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,50);
  u8g2.print("MQ6");
  u8g2.setCursor(33,50);
  u8g2.print(analogRead(PinMQ6));
  u8g2.setCursor(64,50);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinLDR));
  u8g2.setCursor(104,50);
  u8g2.print("LDR");
 
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,60);
  u8g2.print("Hum");
  u8g2.setCursor(33,60);
  u8g2.print(dht.readHumidity(),0);
  u8g2.setCursor(64,60);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(dht.readTemperature(),1);
  u8g2.setCursor(104,60);
  u8g2.print("Temp");
u8g2.sendBuffer();
 }

void AlertFontLineFirst(){
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_logisoso32_tf);
  u8g2.setCursor(0,32);
  }
 
void AlertLineSecond(){
  u8g2.setCursor(0,64);
  }

void AlertShowDisplay(){
  u8g2.sendBuffer();
}
 
void loop(void) {

      if (analogRead(PinMQ2) >LimitMQ2) {
        AlertFontLineFirst();
        u8g2.print(MsgMQ2);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ2));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ3) > LimitMQ3){
        AlertFontLineFirst();
        u8g2.print(MsgMQ3);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ3));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ4) > LimitMQ4){
        AlertFontLineFirst();
        u8g2.print(MsgMQ4);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ4));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ5) > LimitMQ5){
        AlertFontLineFirst();
        u8g2.print(MsgMQ5);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ5));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ6) > LimitMQ6){
        AlertFontLineFirst();
        u8g2.print(MsgMQ6);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ6));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ7) > LimitMQ7){
        AlertFontLineFirst();
        u8g2.print(MsgMQ7);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ7));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ8) > LimitMQ8){
        AlertFontLineFirst();
        u8g2.print(MsgMQ8);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ8));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ9) > LimitMQ9){
        AlertFontLineFirst();
        u8g2.print(MsgMQ9);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ9));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ135) > LimitMQ135){
        AlertFontLineFirst();
        u8g2.print(MsgMQ135);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ135));
        AlertShowDisplay();
        }
      else if (dht.readHumidity() > LimitSupHum){
        AlertFontLineFirst();
        u8g2.print(MsgHum);
        AlertLineSecond();
        u8g2.print(dht.readHumidity(),0); // decimal ,0
        u8g2.print("%");
        AlertShowDisplay();
        }
      else if (dht.readHumidity() < LimitInfHum){
        AlertFontLineFirst();
        u8g2.print(MsgHum);
        AlertLineSecond();
        u8g2.print(dht.readHumidity(),0);
        u8g2.print("%");
        AlertShowDisplay();
        }
      else if (dht.readTemperature() > LimitSupTemp){
        AlertFontLineFirst();
        u8g2.print(MsgTemp);
        AlertLineSecond();
        u8g2.print(dht.readTemperature(),1); // decimal  ,1
        u8g2.print("C");
        AlertShowDisplay();
        }
      else if (dht.readTemperature() < LimitInfTemp){
        AlertFontLineFirst();
        u8g2.print(MsgTemp);
        AlertLineSecond();
        u8g2.print(dht.readTemperature(),1);
        u8g2.print("C");
        AlertShowDisplay();
        }
      else {
        AllValue();
      }
     
  delay(1000);
}

V1.2 Affichages des valeurs analog + Alerte des limites établies + Dimming Oled  10-10-2020
        Résumé:   if (analogRead(PinLDR) < LimitInfLDR){
                            u8g2.setContrast(0);
                            u8g2.setContrast(255);
Comme le DHT est trop près, il m'a fallu faire des ajustements de Temp & Humd. pas top --> Je vous conseille de le situé plus à  l'éxterieur !
                            int TempAdjust = -4;
                            int HumdAdjust = 7;

// http://forum.bidouilleur.ca/
// v1.2 AirQ  Alert Dimming

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <DHT.h>
#define DHTPIN PB8
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

char MsgMQ2[]= "PropH2";// Menssage Alert
char MsgMQ3[] = "Alcoh.";
char MsgMQ4[] = "CH4";
char MsgMQ5[] = "LPGch4";
char MsgMQ6[] = "CH4lpg";
char MsgMQ7[] = "H2 CO";
char MsgMQ8[] = "H2 Alc";
char MsgMQ9[] = "CH4 CO";
char MsgMQ135[] = "AirQ";
char MsgHum[] = "HUMID.";
char MsgTemp[] = "TEMP.";

int PinMQ2 = PA7;// analogRead(Pin Read Pin
int PinMQ3 = PA0;
int PinMQ4 = PA1;
int PinMQ5 = PA2;
int PinMQ6 = PA3;
int PinMQ7 = PB0;
int PinMQ8 = PA5;
int PinMQ9 = PA4;
int PinMQ135 = PA6;
int PinLDR = PB1;
int TempAdjust = -4; // negative = substract / positive = add
int HumdAdjust = 7;  // negative = substract / positive = add

int LimitMQ2 = 55;// Limits Definied by User
int LimitMQ3 = 64;
int LimitMQ4 = 64;
int LimitMQ5 = 38;
int LimitMQ6 = 42;
int LimitMQ7 = 32;
int LimitMQ8 = 13;
int LimitMQ9 = 33;
int LimitMQ135 = 11;
int LimitSupHum = 77;
int LimitInfHum = 40;
int LimitSupTemp = 27;
int LimitInfTemp = 17;
int LimitSupLDR = 450;
int LimitInfLDR = 93;

void setup(void) {
  u8g2.begin();
  dht.begin();
}

void AllValue(){
u8g2.clearBuffer();
      if (analogRead(PinLDR) < LimitInfLDR){
        u8g2.setContrast(0);
        }
      else{
        u8g2.setContrast(255);
        }   
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,10);
  u8g2.print("MQ2");
  u8g2.setCursor(33,10);
  u8g2.print(analogRead(PinMQ2));
  u8g2.setCursor(64,10);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinMQ7));
  u8g2.setCursor(104,10);
  u8g2.print("MQ7");
 
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,20);
  u8g2.print("MQ3");
  u8g2.setCursor(33,20);
  u8g2.print(analogRead(PinMQ3));
  u8g2.setCursor(64,20);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinMQ8));
  u8g2.setCursor(104,20);
  u8g2.print("MQ8");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,30);
  u8g2.print("MQ4");
  u8g2.setCursor(33,30);
  u8g2.print(analogRead(PinMQ4));
  u8g2.setCursor(64,30);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinMQ9));
  u8g2.setCursor(104,30);
  u8g2.print("MQ9");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,40);
  u8g2.print("MQ5");
  u8g2.setCursor(33,40);
  u8g2.print(analogRead(PinMQ5));
  u8g2.setCursor(64,40);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinMQ135));
  u8g2.setCursor(104,40);
  u8g2.print("M135");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,50);
  u8g2.print("MQ6");
  u8g2.setCursor(33,50);
  u8g2.print(analogRead(PinMQ6));
  u8g2.setCursor(64,50);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinLDR));
  u8g2.setCursor(104,50);
  u8g2.print("LDR");
 
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,60);
  u8g2.print("Hum");
  u8g2.setCursor(33,60);
  u8g2.print((dht.readHumidity()+HumdAdjust),0);
  u8g2.setCursor(64,60);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print((dht.readTemperature()+TempAdjust),1);
  u8g2.setCursor(104,60);
  u8g2.print("Temp");
u8g2.sendBuffer();
delay(500);
 }

void AlertFontLineFirst(){
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_logisoso30_tf);
  u8g2.setCursor(0,32);
  }
 
void AlertLineSecond(){
  u8g2.setCursor(0,64);
  }

void AlertShowDisplay(){
      if (analogRead(PinLDR) < LimitInfLDR){
        u8g2.setContrast(0);
        u8g2.sendBuffer();
        }
      else{
        u8g2.setContrast(255);
        u8g2.sendBuffer();
        }   
     delay(1000);
     }
 
void loop(void) {
      if (analogRead(PinMQ2) >LimitMQ2) {
        AlertFontLineFirst();
        u8g2.print(MsgMQ2);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ2));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ3) > LimitMQ3){
        AlertFontLineFirst();
        u8g2.print(MsgMQ3);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ3));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ4) > LimitMQ4){
        AlertFontLineFirst();
        u8g2.print(MsgMQ4);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ4));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ5) > LimitMQ5){
        AlertFontLineFirst();
        u8g2.print(MsgMQ5);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ5));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ6) > LimitMQ6){
        AlertFontLineFirst();
        u8g2.print(MsgMQ6);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ6));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ7) > LimitMQ7){
        AlertFontLineFirst();
        u8g2.print(MsgMQ7);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ7));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ8) > LimitMQ8){
        AlertFontLineFirst();
        u8g2.print(MsgMQ8);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ8));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ9) > LimitMQ9){
        AlertFontLineFirst();
        u8g2.print(MsgMQ9);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ9));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ135) > LimitMQ135){
        AlertFontLineFirst();
        u8g2.print(MsgMQ135);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ135));
        AlertShowDisplay();
        }
      else if ((dht.readHumidity()+HumdAdjust) > LimitSupHum){
        AlertFontLineFirst();
        u8g2.print(MsgHum);
        AlertLineSecond();
        u8g2.print((dht.readHumidity()+HumdAdjust),0); // decimal ,0
        u8g2.print("%");
        AlertShowDisplay();
        }
      else if ((dht.readHumidity()+HumdAdjust) < LimitInfHum){
        AlertFontLineFirst();
        u8g2.print(MsgHum);
        AlertLineSecond();
        u8g2.print((dht.readHumidity()+HumdAdjust),0);
        u8g2.print("%");
        AlertShowDisplay();
        }
      else if ((dht.readTemperature()+TempAdjust) > LimitSupTemp){
        AlertFontLineFirst();
        u8g2.print(MsgTemp);
        AlertLineSecond();
        u8g2.print((dht.readTemperature()+TempAdjust),1); // decimal  ,1
        u8g2.print("C");
        AlertShowDisplay();
        }
      else if ((dht.readTemperature()+TempAdjust) < LimitInfTemp){
        AlertFontLineFirst();
        u8g2.print(MsgTemp);
        AlertLineSecond();
        u8g2.print((dht.readTemperature()+TempAdjust),1);
        u8g2.print("C");
        AlertShowDisplay();
        }
      else {
        AllValue();
      }   
  delay(200);
}


INFO PRATIQUE:

Library
https://github.com/olikraus/u8g2
https://github.com/adafruit/DHT-sensor-library

Fonts du texte u8g2
https://github.com/olikraus/u8g2/wiki/fntgrplogisoso

Tuto STM32F103C8T6 par USB comme Arduino
https://www.youtube.com/watch?v=Myon8H111PQ

Pour des lectures en ppm mgL et plus:
https://github.com/miguel5612/MQSensorsLib
pour le zip MQUnifiedsensor.h directement
https://github.com/miguel5612/MQSensorsLib/archive/master.zip

À bientôt !  ;)
« Modifié: octobre 10, 2020, 05:59:10 am par Manu »
IP archivée

Manu

  • Newbie
  • *
  • Messages: 36
    • Voir le profil
Re : Qualité de l'air ( STM32/Arduino & MQ Sensor )
« Réponse #1 le: octobre 04, 2020, 05:04:40 am »

Bonjour,

J'ai besoin d'un peu d'aide pour ne pas répéter les "float & int" dans chaque "void". ??? Si quelqu'un peut me donner une idée ou deux. Merci  ;D
Je n'arrive pas a faire un refresh dans le "void loop" sans remettre les "float & int"

/*PIN Config
A0 - Sensor MQ3  ( Alcohol )
A1 - Sensor MQ4  ( CH4 )
A2 - Sensor MQ5  ( LPG & CH4 )
A3 - Sensor MQ6  ( CH4 & LPG )
A4 - Sensor MQ9  ( CH4 & CO )
A5 - Sensor MQ8  ( H2 & Alcohol )
A6 - Sensor MQ135( NH4 Aire Quality )
A7 - Sensor MQ2  ( Propane & H2 )
B0 - Sensor MQ7  ( H2 & CO )
B1 - LDR         ( LDR GL5528 )
B6 - OLED SCL    ( OLED 1.3' 4P SH1106 I2C 128x64 )
B7 - OLED SDA
B8 - DHT22       ( Data TX -> RX avec pullup 10k)
B12- MicroSD cs  ( MicroSD SPI )
B13- MicroSD sck
B14- MicroSD miso
B15- MicroSD mosi
*/

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <DHT.h>
#define DHTPIN PB8
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
 
// Value Read Pin
int ValueMQ2 = analogRead(PA7);
int ValueMQ3 = analogRead(PA0);
int ValueMQ4 = analogRead(PA1);
int ValueMQ5 = analogRead(PA2);
int ValueMQ6 = analogRead(PA3);
int ValueMQ7 = analogRead(PB0);
int ValueMQ8 = analogRead(PA5);
int ValueMQ9 = analogRead(PA4);
int ValueMQ135 = analogRead(PA6);
int ValueLDR = analogRead(PB1);

// Limits Definied by User
int LimitMQ2 = 70;
int LimitMQ3 = 70;
int LimitMQ4 = 70;
int LimitMQ5 = 45;
int LimitMQ6 = 50;
int LimitMQ7 = 35;
int LimitMQ8 = 18;
int LimitMQ9 = 35;
int LimitMQ135 = 13;
int LimitSupHum = 75;
int LimitInfHum = 40;
int LimitSupTemp = 27;
int LimitInfTemp = 17;

// Menssage Alert
char MsgMQ2[]= "PropH2";
char MsgMQ3[] = "Alcoh.";
char MsgMQ4[] = "CH4";
char MsgMQ5[] = "LPGch4";
char MsgMQ6[] = "CH4lpg";
char MsgMQ7[] = "H2 CO";
char MsgMQ8[] = "H2 Alc";
char MsgMQ9[] = "CH4 CO";
char MsgMQ135[] = "AirQ";
char MsgHum[] = "HUMID.";
char MsgTemp[] = "TEMP.";

void setup(void) {
  u8g2.begin();
  dht.begin();

}

void AllValue(){
  /* Display show
   MQ2 --- MQ7
   MQ3 --- MQ8
   MQ4 --- MQ9
   MQ5 --- MQ135
   MQ6 --- LDR
   HUM --- TEMP
   */
   
float h = dht.readHumidity();
float t = dht.readTemperature(); // for C to F dht.readTemperature(True);
// Value Read Pin
int ValueMQ2 = analogRead(PA7);
int ValueMQ3 = analogRead(PA0);
int ValueMQ4 = analogRead(PA1);
int ValueMQ5 = analogRead(PA2);
int ValueMQ6 = analogRead(PA3);
int ValueMQ7 = analogRead(PB0);
int ValueMQ8 = analogRead(PA5);
int ValueMQ9 = analogRead(PA4);
int ValueMQ135 = analogRead(PA6);
int ValueLDR = analogRead(PB1);
 
  u8g2.clearBuffer();
 
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,10);
  u8g2.print("MQ2");
  u8g2.setCursor(33,10);
  u8g2.print(ValueMQ2);
  u8g2.setCursor(64,10);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(ValueMQ7);
  u8g2.setCursor(104,10);
  u8g2.print("MQ7");
 
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,20);
  u8g2.print("MQ3");
  u8g2.setCursor(33,20);
  u8g2.print(ValueMQ3);
  u8g2.setCursor(64,20);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(ValueMQ8);
  u8g2.setCursor(104,20);
  u8g2.print("MQ8");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,30);
  u8g2.print("MQ4");
  u8g2.setCursor(33,30);
  u8g2.print(ValueMQ4);
  u8g2.setCursor(64,30);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(ValueMQ9);
  u8g2.setCursor(104,30);
  u8g2.print("MQ9");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,40);
  u8g2.print("MQ5");
  u8g2.setCursor(33,40);
  u8g2.print(ValueMQ5);
  u8g2.setCursor(64,40);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(ValueMQ135);
  u8g2.setCursor(104,40);
  u8g2.print("MQ135");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,50);
  u8g2.print("MQ6");
  u8g2.setCursor(33,50);
  u8g2.print(ValueMQ6);
  u8g2.setCursor(64,50);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(ValueLDR);
  u8g2.setCursor(104,50);
  u8g2.print("LDR");
 
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,60);
  u8g2.print("Hum");
  u8g2.setCursor(33,60);
  u8g2.print(h,0);
  u8g2.setCursor(64,60);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(t,1);
  u8g2.setCursor(104,60);
  u8g2.print("Temp");
 
  u8g2.sendBuffer();
 }

void AlertFontLineFirst(){
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_logisoso32_tf);
  u8g2.setCursor(0,32);
  }
 
void AlertLineSecond(){
  u8g2.setCursor(0,64);
  }

void AlertShowDisplay(){
  u8g2.sendBuffer();
}
 
void loop(void) {
 
float h = dht.readHumidity();
float t = dht.readTemperature(); // for C to F dht.readTemperature(True);
// Value Read Pin
int ValueMQ2 = analogRead(PA7);
int ValueMQ3 = analogRead(PA0);
int ValueMQ4 = analogRead(PA1);
int ValueMQ5 = analogRead(PA2);
int ValueMQ6 = analogRead(PA3);
int ValueMQ7 = analogRead(PB0);
int ValueMQ8 = analogRead(PA5);
int ValueMQ9 = analogRead(PA4);
int ValueMQ135 = analogRead(PA6);
int ValueLDR = analogRead(PB1);

      if (ValueMQ2 >LimitMQ2) {
        AlertFontLineFirst();
        u8g2.print(MsgMQ2);
        AlertLineSecond();
        u8g2.print(ValueMQ2);
        AlertShowDisplay();
        }
      else if (ValueMQ3 > LimitMQ3){
        AlertFontLineFirst();
        u8g2.print(MsgMQ3);
        AlertLineSecond();
        u8g2.print(ValueMQ3);
        AlertShowDisplay();
        }
      else if (ValueMQ4 > LimitMQ4){
        AlertFontLineFirst();
        u8g2.print(MsgMQ4);
        AlertLineSecond();
        u8g2.print(ValueMQ4);
        AlertShowDisplay();
        }
      else if (ValueMQ5 > LimitMQ5){
        AlertFontLineFirst();
        u8g2.print(MsgMQ5);
        AlertLineSecond();
        u8g2.print(ValueMQ5);
        AlertShowDisplay();
        }
      else if (ValueMQ6 > LimitMQ6){
        AlertFontLineFirst();
        u8g2.print(MsgMQ6);
        AlertLineSecond();
        u8g2.print(ValueMQ6);
        AlertShowDisplay();
        }
      else if (ValueMQ7 > LimitMQ7){
        AlertFontLineFirst();
        u8g2.print(MsgMQ7);
        AlertLineSecond();
        u8g2.print(ValueMQ7);
        AlertShowDisplay();
        }
      else if (ValueMQ8 > LimitMQ8){
        AlertFontLineFirst();
        u8g2.print(MsgMQ8);
        AlertLineSecond();
        u8g2.print(ValueMQ8);
        AlertShowDisplay();
        }
      else if (ValueMQ9 > LimitMQ9){
        AlertFontLineFirst();
        u8g2.print(MsgMQ9);
        AlertLineSecond();
        u8g2.print(ValueMQ9);
        AlertShowDisplay();
        }
      else if (ValueMQ135 > LimitMQ135){
        AlertFontLineFirst();
        u8g2.print(MsgMQ135);
        AlertLineSecond();
        u8g2.print(ValueMQ135);
        AlertShowDisplay();
        }
      else if (h > LimitSupHum){
        AlertFontLineFirst();
        u8g2.print(MsgHum);
        AlertLineSecond();
        u8g2.print(h,0); // decimal ,0
        u8g2.print("%");
        AlertShowDisplay();
        }
      else if (h < LimitInfHum){
        AlertFontLineFirst();
        u8g2.print(MsgHum);
        AlertLineSecond();
        u8g2.print(h,0);
        u8g2.print("%");
        AlertShowDisplay();
        }
      else if (t > LimitSupTemp){
        AlertFontLineFirst();
        u8g2.print(MsgTemp);
        AlertLineSecond();
        u8g2.print(t,1); // decimal  ,1
        u8g2.print("C");
        AlertShowDisplay();
        }
      else if (t < LimitInfTemp){
        AlertFontLineFirst();
        u8g2.print(MsgTemp);
        AlertLineSecond();
        u8g2.print(t,1);
        u8g2.print("C");
        AlertShowDisplay();
        }
      else {
        AllValue();
      }
     
  delay(1000);
}
« Modifié: octobre 04, 2020, 05:10:55 am par Manu »
IP archivée

papyblue

  • Administrator
  • Hero Member
  • *****
  • Messages: 744
    • Voir le profil

Bonjour Manu,

Je ne suis pas sur d'avoir compris la question, mais je trouve que la façon de coder n'est pas la meilleure. Personnellement, je préfère séparer la déclaration des variables de leur affectation pour une meilleure lisibilité. Quel est ton problème plus précisément ?

PB
IP archivée

Manu

  • Newbie
  • *
  • Messages: 36
    • Voir le profil

Bonjour Papyblue,

Merci de repondre aussi vite, je ne sais pas vraiment coder mais j'essaie de me dépatouiller comme je peux. C'est bien là  tout le problème.

J'aurai voulu que ces deux "void"
  void AllValue()
  void loop(void)

prennet en compte cela:
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  int ValueMQ2 = analogRead(PA7);
  int ValueMQ3 = analogRead(PA0);
  int ValueMQ4 = analogRead(PA1);
  ....

Mais, je sais pas où placer les "int & float". J'ai essayé de les placer au début avec les "define" et j'ai aussi essayé dans le "void setup", mais les valeurs ne se refresh que la première fois, pas à  chaque "loop".

Pour le moment ça ne fonctionne que si je répète les "int & float" dans chacun des "void".
IP archivée

papyblue

  • Administrator
  • Hero Member
  • *****
  • Messages: 744
    • Voir le profil

Les variables déclarées à  l'intérieur d'une fonction ne sont visibles que dans celle ci. Cela vaut aussi pour 'loop'. Quand on a besoin d'une variable qui doit être visible de plusieurs fonctions, il faut la mettre "globale" , c'est-à -dire déclarée en dehors de toute fonction. La directive #define ne sert pas à  déclarer une variable, elle est utilisée par le préprocesseur pour substituer du texte, dans la pratique, elle sert pour des constantes.

PB 
IP archivée

Manu

  • Newbie
  • *
  • Messages: 36
    • Voir le profil
Re : Qualité de l'air ( STM32/Arduino & MQ Sensor ) [ float & int Ok ]
« Réponse #5 le: octobre 04, 2020, 12:16:57 pm »

 ;) Top  Merci !

ERREUR: Il ne faut pas sonder la valeur analog du PIN. ( les "float" du DHT n'étaient pas nécessaires )
int ValueMQ2 = analogRead(PA7);

1º: Déclarer les variables "int" qui indique les PIN.
int PinMQ2 = PA7;

2º: Puis a l'intérieur des fonctions "void" faire la lecture analog du PIN.
analogRead(PinMQ2)


Code avec alerte:
Qui affiche une alerte quand les limites établies sont dépassées.

/* http://forum.bidouilleur.ca
 * Merci a papyblue

PIN Config
A0 - Sensor MQ3  ( Alcohol )
A1 - Sensor MQ4  ( CH4 )
A2 - Sensor MQ5  ( LPG & CH4 )
A3 - Sensor MQ6  ( CH4 & LPG )
A4 - Sensor MQ9  ( CH4 & CO )
A5 - Sensor MQ8  ( H2 & Alcohol )
A6 - Sensor MQ135( NH4 Aire Quality )
A7 - Sensor MQ2  ( Propane & H2 )
B0 - Sensor MQ7  ( H2 & CO )
B1 - LDR         ( LDR GL5528 )
B6 - OLED SCL    ( OLED 1.3' 4P SH1106 I2C 128x64 )
B7 - OLED SDA
B8 - DHT22       ( Data TX -> RX avec pullup 10k)
B12- MicroSD cs  ( MicroSD SPI )
B13- MicroSD sck
B14- MicroSD miso
B15- MicroSD mosi
*/

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <DHT.h>
#define DHTPIN PB8
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

// Menssage Alert
char MsgMQ2[]= "PropH2";
char MsgMQ3[] = "Alcoh.";
char MsgMQ4[] = "CH4";
char MsgMQ5[] = "LPGch4";
char MsgMQ6[] = "CH4lpg";
char MsgMQ7[] = "H2 CO";
char MsgMQ8[] = "H2 Alc";
char MsgMQ9[] = "CH4 CO";
char MsgMQ135[] = "AirQ";
char MsgHum[] = "HUMID.";
char MsgTemp[] = "TEMP.";
// analogRead(Pin Read Pin
int PinMQ2 = PA7;
int PinMQ3 = PA0;
int PinMQ4 = PA1;
int PinMQ5 = PA2;
int PinMQ6 = PA3;
int PinMQ7 = PB0;
int PinMQ8 = PA5;
int PinMQ9 = PA4;
int PinMQ135 = PA6;
int PinLDR = PB1;
// Limits Definied by User
int LimitMQ2 = 70;
int LimitMQ3 = 70;
int LimitMQ4 = 70;
int LimitMQ5 = 45;
int LimitMQ6 = 50;
int LimitMQ7 = 35;
int LimitMQ8 = 18;
int LimitMQ9 = 35;
int LimitMQ135 = 13;
int LimitSupHum = 75;
int LimitInfHum = 40;
int LimitSupTemp = 27;
int LimitInfTemp = 17;

void setup(void) {
  u8g2.begin();
  dht.begin();
}

void AllValue(){
  /* Display show
   MQ2 --- MQ7
   MQ3 --- MQ8
   MQ4 --- MQ9
   MQ5 --- MQ135
   MQ6 --- LDR
   HUM --- TEMP
   */
u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,10);
  u8g2.print("MQ2");
  u8g2.setCursor(33,10);
  u8g2.print(analogRead(PinMQ2));
  u8g2.setCursor(64,10);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinMQ7));
  u8g2.setCursor(104,10);
  u8g2.print("MQ7");
 
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,20);
  u8g2.print("MQ3");
  u8g2.setCursor(33,20);
  u8g2.print(analogRead(PinMQ3));
  u8g2.setCursor(64,20);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinMQ8));
  u8g2.setCursor(104,20);
  u8g2.print("MQ8");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,30);
  u8g2.print("MQ4");
  u8g2.setCursor(33,30);
  u8g2.print(analogRead(PinMQ4));
  u8g2.setCursor(64,30);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinMQ9));
  u8g2.setCursor(104,30);
  u8g2.print("MQ9");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,40);
  u8g2.print("MQ5");
  u8g2.setCursor(33,40);
  u8g2.print(analogRead(PinMQ5));
  u8g2.setCursor(64,40);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinMQ135));
  u8g2.setCursor(104,40);
  u8g2.print("MQ135");

  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,50);
  u8g2.print("MQ6");
  u8g2.setCursor(33,50);
  u8g2.print(analogRead(PinMQ6));
  u8g2.setCursor(64,50);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(analogRead(PinLDR));
  u8g2.setCursor(104,50);
  u8g2.print("LDR");
 
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.setCursor(0,60);
  u8g2.print("Hum");
  u8g2.setCursor(33,60);
  u8g2.print(dht.readHumidity(),0);
  u8g2.setCursor(64,60);
  u8g2.setFont(u8g2_font_haxrcorp4089_tr);
  u8g2.print("/ ");
  u8g2.print(dht.readTemperature(),1);
  u8g2.setCursor(104,60);
  u8g2.print("Temp");
u8g2.sendBuffer();
 }

void AlertFontLineFirst(){
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_logisoso32_tf);
  u8g2.setCursor(0,32);
  }
 
void AlertLineSecond(){
  u8g2.setCursor(0,64);
  }

void AlertShowDisplay(){
  u8g2.sendBuffer();
}
 
void loop(void) {

      if (analogRead(PinMQ2) >LimitMQ2) {
        AlertFontLineFirst();
        u8g2.print(MsgMQ2);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ2));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ3) > LimitMQ3){
        AlertFontLineFirst();
        u8g2.print(MsgMQ3);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ3));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ4) > LimitMQ4){
        AlertFontLineFirst();
        u8g2.print(MsgMQ4);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ4));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ5) > LimitMQ5){
        AlertFontLineFirst();
        u8g2.print(MsgMQ5);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ5));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ6) > LimitMQ6){
        AlertFontLineFirst();
        u8g2.print(MsgMQ6);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ6));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ7) > LimitMQ7){
        AlertFontLineFirst();
        u8g2.print(MsgMQ7);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ7));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ8) > LimitMQ8){
        AlertFontLineFirst();
        u8g2.print(MsgMQ8);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ8));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ9) > LimitMQ9){
        AlertFontLineFirst();
        u8g2.print(MsgMQ9);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ9));
        AlertShowDisplay();
        }
      else if (analogRead(PinMQ135) > LimitMQ135){
        AlertFontLineFirst();
        u8g2.print(MsgMQ135);
        AlertLineSecond();
        u8g2.print(analogRead(PinMQ135));
        AlertShowDisplay();
        }
      else if (dht.readHumidity() > LimitSupHum){
        AlertFontLineFirst();
        u8g2.print(MsgHum);
        AlertLineSecond();
        u8g2.print(dht.readHumidity(),0); // decimal ,0
        u8g2.print("%");
        AlertShowDisplay();
        }
      else if (dht.readHumidity() < LimitInfHum){
        AlertFontLineFirst();
        u8g2.print(MsgHum);
        AlertLineSecond();
        u8g2.print(dht.readHumidity(),0);
        u8g2.print("%");
        AlertShowDisplay();
        }
      else if (dht.readTemperature() > LimitSupTemp){
        AlertFontLineFirst();
        u8g2.print(MsgTemp);
        AlertLineSecond();
        u8g2.print(dht.readTemperature(),1); // decimal  ,1
        u8g2.print("C");
        AlertShowDisplay();
        }
      else if (dht.readTemperature() < LimitInfTemp){
        AlertFontLineFirst();
        u8g2.print(MsgTemp);
        AlertLineSecond();
        u8g2.print(dht.readTemperature(),1);
        u8g2.print("C");
        AlertShowDisplay();
        }
      else {
        AllValue();
      }
     
  delay(1000);
}
IP archivée

Manu

  • Newbie
  • *
  • Messages: 36
    • Voir le profil
Re : Qualité de l'air ( STM32 & MQ Sensor & Alerte & Dimming )
« Réponse #6 le: octobre 10, 2020, 05:12:55 am »

Je rajoute le mode dimming grâce à  la LDR  :)

V1.2 Affichages des valeurs analog + Alerte des limites établies + Dimming Oled  10-10-2020
        Résumé:   if (analogRead(PinLDR) < LimitInfLDR){
                            u8g2.setContrast(0);
                            u8g2.setContrast(255);
IP archivée