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:

Bienvenue au Forum de discussion Électro-Bidouilleur! Inscrivez-vous pour participer aux discussions!: 
http://forum.bidouilleur.ca/index.php?action=register Les demandes d'inscription sont révisées quotidiennement.

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.

Messages - Manu

Pages: [1]
1
Ok merci, je vais voir cette méthode aussi. Pour le moment, la fonction dont j'avais besoin fonctionne. Mon problème est plutôt l'organisation du code de manière plus intelligible.

2
Salut à tous,  :)

Je faisais un thermostat qui était très simple en principe, mais finalement qui m'a bien caser la tête pour obtenir quelque chose comme un effet d'hystérésis. Je ne connais que les bases de code sur Arduino, donc toute contribution, simplification, nettoyage etc.. du code sera la bienvenue  ;D

Thermostat qui active un ventilateur à partir d'une température. Une fois activé, il devra descendre de deux degrés pour se désactiver.





T= 19ºC sur la photo   Température Réelle
A= 24ºC sur la photo   Temp Activation
B= pasa sur el display   Temp Activation avec "hystérésis" à partir de 2eme tour du "for".

for (T >= A ; T>= B ; T=T) {
      digitalWrite(Pin_Relay, LOW);
      B = (A-2);                           
}


// http://forum.bidouilleur.ca/
// v1.0 Thermostat STM32
/*
STM32F103C8T6
Relay 5v mod 3.3V
OLED SH1106
DHT22

PA5 input analog voltmeter
PB0 input analo pot for activation adjust
PB6 SCK OLED SH1106
PB7 SDA OLED SH1106
PB8 DHT22
 */

#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);
int Pin_Relay = PA0;
int Pin_VSalida = PA5;
int Pin_Activ = PB0;

void setup(void) {
  Serial.begin(9600);
  u8g2.begin();
  dht.begin();
  pinMode(Pin_Relay, OUTPUT);
  pinMode(Pin_VSalida, INPUT);
  pinMode(Pin_Activ, INPUT);
  digitalWrite(Pin_Relay, HIGH);
  delay(500);
}

void loop(void) {
 
 float T = dht.readTemperature();                   // Temperature ªC (for ºF -> dht.Temperature(True))
 float H = dht.readHumidity();                      // Humidity
 float V = (analogRead(Pin_VSalida)/71.236);        // AnalogRead to Volts (the formula changes according to the voltage divider bridge used)
 float A = ((analogRead(Pin_Activ)*1.01)-1001);     // AnalogRead to Temp activation (the formula changes according to the potentiometer value and voltage divider bridge used)
 float B = A;                                       // Over Temperature ºC = Activation Relay to apply later hysterersis

// Relay ON necessary conditions
for (T >= A ; T>= B ; T=T) {                        // Step1 Temp > A , Step2 Temp > B , Step3 not necessary but fill Temp = Temp 
  //Relay ON
  u8g2.clearBuffer();
  digitalWrite(Pin_Relay, LOW);
  u8g2.setFont (u8g2_font_courB12_tf);
  u8g2.setCursor(0,18);
  u8g2.print("ON");
  u8g2.setCursor(52,18);
  u8g2.print(V,0);
  u8g2.print("V");
  u8g2.setFont (u8g2_font_courB12_tf);
  u8g2.setCursor(86,18);
  u8g2.print(A,0);
  u8g2.print((char)176);
  u8g2.print("C"); 
  u8g2.setFont(u8g2_font_logisoso16_tr);
  u8g2.setCursor(0,40);
  u8g2.print("Temp");
  u8g2.setCursor(64,40);
  u8g2.print(dht.readTemperature(),0);
  u8g2.print((char)167);
  u8g2.print(" C");
  u8g2.setFont(u8g2_font_logisoso16_tr);
  u8g2.setCursor(0,63);
  u8g2.print("Hum");
  u8g2.setCursor(64,63);
  u8g2.print(dht.readHumidity(),0);
  u8g2.print(" ");
  u8g2.print((char)37);
  u8g2.sendBuffer();
  delay(300);
  T = dht.readTemperature();
  H = dht.readHumidity();                   
  V = (analogRead(Pin_VSalida)/71.236);       
  A = ((analogRead(Pin_Activ)*1.01)-1001); 
  B = (A-2);                                   // for Step2 Temp > B add "Hysteresis"
}
// Relay OFF
  u8g2.clearBuffer();
  digitalWrite(Pin_Relay, HIGH);
  u8g2.setFont (u8g2_font_courB12_tf);
  u8g2.setCursor(0,18);
  u8g2.print("OFF");
  u8g2.setCursor(52,18);
  u8g2.print(V,0);
  u8g2.print("V");
  u8g2.setFont (u8g2_font_courB12_tf);
  u8g2.setCursor(86,18);
  u8g2.print(A,0);
  u8g2.print((char)176);
  u8g2.print("C"); 
  u8g2.setFont(u8g2_font_logisoso16_tr);
  u8g2.setCursor(0,40);
  u8g2.print("Temp");
  u8g2.setCursor(64,40);
  u8g2.print(dht.readTemperature(),0);
  u8g2.print((char)167);
  u8g2.print(" C");
  u8g2.setFont(u8g2_font_logisoso16_tr);
  u8g2.setCursor(0,63);
  u8g2.print("Hum");
  u8g2.setCursor(64,63);
  u8g2.print(dht.readHumidity(),0);
  u8g2.print(" ");
  u8g2.print((char)37);
  u8g2.sendBuffer();
  delay(300);
}

Liens:

Relais 5v -> 3.3v modif
http://forum.bidouilleur.ca/index.php?topic=907.0

EB_#148 Banc d'Essai: Contrôleur de Température W1209 (Thermostat)
https://youtu.be/j6blCrNm-5s

3
Trucs et Astuces d'Électronique / Relais Arduino 5V pour 3.3V STM32
« le: novembre 21, 2020, 09:05:25 pm »
Bonjour  :)

Pour la petite histoire, je voulais faire fonctionner un relais arduino 5v sur une sortie 3.3v du STM32F103C8T6. Après avoir trouvé plusieurs problèmes, la solution était finalement plutôt simple. Je suppose que cette astuce est connue de beaucoup, mais je n'ai rien trouvé dans le forum à ce sujet.

Let´s Go

Vous devrez retirer, la résistance (102) donc de 1K et la remplacer par une 6.8K + 2.2K comme sur cette image.

   

Quelques lignes de code pour peut être vous donnez des idéeas

int RELAY_PIN = PA0;

void setup(void) {
  Serial.begin(9600);
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, HIGH);
}

void loop(void) {
    digitalWrite(RELAY_PIN, LOW);
    delay(2000);
    digitalWrite(RELAY_PIN, HIGH);
    delay(2000);
}

Les Pins compatible Output I/O  sur STM32F103C8T6  :o
de PA0   -> PA15
de PB0   -> PB15
de PC13 -> PC15 ( PC13 led verte)

Inspiré de

EB_#250 Mini-Plaquette - Relais (x4) contrôlés par logique
https://www.youtube.com/watch?v=sbJhaDjLHcY

https://www.hackster.io/Gyro1/5v-relay-module-mod-to-work-with-raspberry-pi-65b475

4
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);

5
 ;) 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);
}

6
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".

7
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);
}

8
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 !  ;)

Pages: [1]