Étape 2: Le programme
Explications du code (code complet ci-dessous) :
#include "U8glib.h"#include "BMP280.h"
Ils sont les 2 bibliothèques, que vous devez mettre à l’intérieur de la Documents\Arduino\libraries\
#define P0 1021.97
C’est où vous calibrer l’altimètre, changer cette valeur. Une fois que c’est fait, c’est assez précis !
(par défaut c’est 1013.25, j’ai eu jusqu'à 1021.97 d’avoir la bonne altitude dans ma ville)
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);
Ici, vous définissez le type d’écran Oled (128 x 64 etc....)
u8g.drawStr( 5, 10, "Temp: "); u8g.drawStr( 5, 30, "Bar : "); u8g.drawStr( 5, 50, "Alt : "); u8g.drawStr( 50, 10, sT); u8g.drawStr( 50, 30, sP); u8g.drawStr( 50, 50, sA);
Ici les informations que vous souhaitez afficher le premier écran et leur position (Y, X, valeur)
dtostrf(A_MIN, 4, 2, sA_MIN); dtostrf(A_MAX, 4, 2, sA_MAX); u8g.drawStr( 5, 20, "A Min: "); u8g.drawStr( 60, 20, sA_MIN); u8g.drawStr( 5, 45, "A Max: "); u8g.drawStr( 60, 45, sA_MAX);
Même chose pour le deuxième écran
if ( A > A_MAX) { A_MAX = A; }
if ( A < A_MIN || A_MIN == 0) { A_MIN = A; }
Ici, nous mettons à jour l’altitude minimum et maximum stocké
do { draw(T, P, A); } while ( u8g.nextPage() ); u8g.firstPage(); delay(1000);
Ici, avec la valeur de délai (1000 en l’occurrence), vous séjournerez 1 seconde sur le premier écran avant de passer à la seconde. Alors que changer si vous voulez personnaliser l’affichage de l’heure:)
do { draw2(A_MIN, A_MAX); } while ( u8g.nextPage() ); u8g.firstPage(); delay(1000);
Idem pour le second écran !
Espère que c’est clair, n’hésitez pas à poster une question dans les commentaires si nécessaire !
Voici le code complet :
#include "U8glib.h"#include "BMP280.h" #include "Wire.h" #define P0 1021.97 //1013.25 BMP280 bmp; // OLED Type U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); char sT[20]; char sP[9]; char sA[9]; char sA_MIN[9]; char sA_MAX[9]; double A_MIN = 0; double A_MAX = 0; void draw(double T, double P, double A) { u8g.setFont(u8g_font_unifont); dtostrf(T, 4, 2, sT); dtostrf(P, 4, 2, sP); dtostrf(A, 4, 2, sA); u8g.drawStr( 5, 10, "Temp: "); u8g.drawStr( 5, 30, "Bar : "); u8g.drawStr( 5, 50, "Alt : "); u8g.drawStr( 50, 10, sT); u8g.drawStr( 50, 30, sP); u8g.drawStr( 50, 50, sA); } void draw2(double A_MIN, double A_MAX) { u8g.setFont(u8g_font_unifont); dtostrf(A_MIN, 4, 2, sA_MIN); dtostrf(A_MAX, 4, 2, sA_MAX); u8g.drawStr( 5, 20, "A Min: "); u8g.drawStr( 60, 20, sA_MIN); u8g.drawStr( 5, 45, "A Max: "); u8g.drawStr( 60, 45, sA_MAX); } void setup() { Serial.begin(9600); if (!bmp.begin()) { Serial.println("BMP init failed!"); while (1); } else Serial.println("BMP init success!"); bmp.setOversampling(4); u8g.setColorIndex(1); u8g.setFont(u8g_font_unifont); } void loop(void) { double T, P; char result = bmp.startMeasurment(); if (result != 0) { delay(result); result = bmp.getTemperatureAndPressure(T, P); if (result != 0) { double A = bmp.altitude(P, P0); if ( A > A_MAX) { A_MAX = A; } if ( A < A_MIN || A_MIN == 0) { A_MIN = A; } // Serial.print("T = \t"); Serial.print(T, 2); Serial.print(" degC\t"); // Serial.print("P = \t"); Serial.print(P, 2); Serial.print(" mBar\t"); // Serial.print("A = \t"); Serial.print(A, 2); Serial.println(" m"); u8g.firstPage(); do { draw(T, P, A); } while ( u8g.nextPage() ); u8g.firstPage(); delay(1000); do { draw2(A_MIN, A_MAX); } while ( u8g.nextPage() ); u8g.firstPage(); delay(1000); } else { Serial.println("Error."); } } else { Serial.println("Error."); } delay(100); } #include « Wire.h »1013.25 BMP280 bmp ; Type OLEDsT Char [20] ; sP de char [9] ; char de sA [9] ; char sA_MIN [9] ; char sA_MAX [9] ; double A_MIN = 0 ; double A_MAX = 0 ; void draw (double T, double P, double A) {u8g.setFont(u8g_font_unifont) ; dtostrf (T, 4, 2, sT); dtostrf (P, 4, 2, sP); dtostrf (A, 4, 2, sA) ;} void draw2 (double A_MIN, double A_MAX) {u8g.setFont(u8g_font_unifont) ;} void setup() {Serial.begin(9600) ; if (! bmp.begin()) {Serial.println ("BMP init a échoué!"); while (1);} else Serial.println (« succès BMP init!"); bmp.setOversampling(4) ; u8g.setColorIndex(1) ; u8g.setFont(u8g_font_unifont);} void loop(void) {double T, P; résultat char = bmp.startMeasurment() ; if (résultat! = 0) {delay(result) ; résultat = bmp.getTemperatureAndPressure (T, P); if (résultat! = 0) {double A = bmp.altitude (P, P0) ;Si (A < A_MIN || A_MIN == 0) {A_MIN = A;} / / Serial.print ("T = \t") ; Serial.Print (T, 2) ; Serial.Print ("degC\t") ; Serial.Print (« P = \t ") ; Serial.Print (P, 2) ; Serial.Print ("mBar\t") ; Serial.Print ("A = \t") ; Serial.Print (A, 2) ; Serial.println ("m") ; u8g.FirstPage() ;