Bonjour,
Voila je suis nouveau dans le monde de l'Arduino, je rencontre donc quelques soucis de programmation.
J'ai créé un programme permettent de visualisé l'heure, la date, la température et l’hygrométrie sur un écran OLED de 0.96" type SPi.
Pour les mesure de température / hygrométrie j'utilise un DHT11
Pour l'heure / date un Tiny RTC I2C
Toutes les données s'affiche sur mon écran, mais le DHT11 perd totalement la tête ![]()
Voici un échantillons des température relevé sur le Serial(9600) les même qui sont affiché sur l'écran OLED.
T: 13C/ H: 148%
T: 13C/ H: 148%
T: 13C/ H: 148%
T: 13C/ H: 148%
T: 15C/ H: 150%
T: 15C/ H: 150%
T: 15C/ H: 150%
T: 15C/ H: 150%
T: 15C/ H: 150%
T: 15C/ H: 150%
T: 15C/ H: 150%
T: 15C/ H: 150%
T: 26C/ H: 42%
T: 26C/ H: 42%
T: 26C/ H: 42%
T: 26C/ H: 42%
T: 26C/ H: 42%
T: 26C/ H: 42%
T: 26C/ H: 42%
T: 26C/ H: 42%
T: 13C/ H: 148%
T: 13C/ H: 148%
T: 13C/ H: 148%
T: 13C/ H: 148%
T: 13C/ H: 148%
T: 13C/ H: 148%
T: 13C/ H: 148%
T: 13C/ H: 148%
T: 26C/ H: 43%
T: 26C/ H: 43%
T: 26C/ H: 43%
T: 26C/ H: 43%
T: 26C/ H: 43%
T: 26C/ H: 43%
T: 26C/ H: 43%
T: 26C/ H: 43%
T: 16C/ H: 150%
T: 16C/ H: 150%
T: 16C/ H: 150%
T: 16C/ H: 150%
T: 16C/ H: 150%
T: 16C/ H: 150%
T: 16C/ H: 150%
T: 16C/ H: 150%
T: 26C/ H: 43%
T: 26C/ H: 43%
T: 26C/ H: 43%
T: 26C/ H: 43%
T: 26C/ H: 43%
T: 26C/ H: 43%
T: 26C/ H: 43%
T: 26C/ H: 43%
T: 10C/ H: 139%
T: 10C/ H: 139%
T: 10C/ H: 139%
Voici le code que j'utilise:
#include <DS1307RTC.h>
#include "RTClib.h"
#include <U8glib.h>
#include "U8glib.h"
#include <Wire.h>
#include <Time.h>
#include <TimeLib.h>
#include "dht.h"
#define dht_apin 2
dht DHT;
U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9, 8);
char timebuf[10];
char datebuf[10];
int year2digit;
int year4digit;
void draw(void)
{
u8g.setFont(u8g_font_fub14);
u8g.setPrintPos(15,20);
u8g.print(timebuf);
u8g.setPrintPos(15, 40);
u8g.print(datebuf);
u8g.drawStr(70, 62, "T: ");
u8g.drawStr(5, 62, "H: ");
u8g.setPrintPos(90, 62);
u8g.print(DHT.temperature, 0);
u8g.drawStr(111, 62, "C ");
u8g.setPrintPos(25, 62);
u8g.print(DHT.humidity, 0);
u8g.drawStr(45, 62, "% ");
Serial.print("T: ");
Serial.print(DHT.temperature, 0);
Serial.print("C /");
Serial.print(" H: ");
Serial.print(DHT.humidity, 0);
Serial.print("% ");
Serial.println();
}
void setup(void)
{
Serial.begin(9600);
}
void loop(void)
{
DHT.read11(dht_apin);
tmElements_t tm;
if (RTC.read(tm))
{
year2digit = tm.Year - 30;
sprintf(timebuf, "%02d:%02d:%02d",tm.Hour, tm.Minute, tm.Second); // format time
sprintf(datebuf, "%02d/%02d/%02d",tm.Day, tm.Month, year2digit); // format date
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );}
delay(10);
}
Puis je séparé les deux fonctions (DHT.read et RTC.read) ?
Avec un nouveau "Void" par exemple
Car le problème viens visiblement du rafraichissement trop rapide du RTC.
Il doit y avoir un moyen simple mais je ne trouve pas sur le net, ou ne sais pas comment recherché avec mes termes ^^'
Merci d'avances de Votre aide
et dsl pour les fautes ![]()