j'utilise ce superbe capteur depuis peu, et il est vraiment très professionnel, j'ai lu avec attention ce tutoriel, mais j'ai pas bien compris la différence entre ces différents commandes :
oui ca marche (+/- ... j'ai un problème de rapidité de rafraîchissement ... trop rapide !) ... mais est ce que c'est pas mieux si j’utilise une de ces commandes ?
j'essai d'ajouter une boucle de lecture dans à des instants bien déterminer.
disons la phase d'affichage de la température dure 5 secondes, et je vais effectuer la lecture chaque seconde
while ((millis() - ti) < 5000) { //Timer of 5 seconds for the Temperature
if (((millis() - ti) == 0) or ((millis() - ti) == 1000) or ((millis() - ti) == 2000) or ((millis() - ti) == 3000) or ((millis() - ti) == 4000)) {
temp = sensor.readTemperature();
}
j'ai lu avec attention ce tutoriel, mais j'ai pas bien compris la différence entre ces différents commandes :
Ces différentes commandes servent au paramétrage du capteur. La datasheet consacre deux excellents paragraphes à ce sujet.
actuellement je n'utilise aucune
humidity = SI7021_READ_RH();
température = SI7021_READ_TEMPERATURE();
SI7021_READ_RH() et SI7021_READ_TEMPERATURE() sont deux fonctions qui retournent l'humidité et la température.
En revanche elles doivent avoir un paramètre d'entrée, car il existe différentes manières pour acquérir l'humidité et la température, encore une fois la datasheet est explicite.
bon ... j'ai allégé le code (j'ai changer l'affichage multiplexé par un affichage dans la console) ... le code est le suivant :
#include <TimeLib.h> //Time Library
#include <DS3232RTC.h> //Real Time Clock Library
#include "Adafruit_Si7021.h"
#include <Wire.h> //Auxiliary Library for DS1307RTC (Real-Time Clock) - Pins to Arduino UNO: A4 (SDA), A5 (SCL)
Adafruit_Si7021 sensor = Adafruit_Si7021();
int hora, minuto;
int temp, umid;
int unidadeHora, unidadeMinuto, dezenaHora, dezenaMinuto;
int unidadeTemp, dezenaTemp, centmTemp, unidadeUmid, dezenaUmid, centmUmid;
unsigned long ti;
time_t t = now();
void setup() {
sensor.begin();
Serial.begin(115200);
setSyncProvider(RTC.get); // Update the time with data of RTC (Real Time Clock)
}
void loop() {
//-------------------------------------------------------------------------------------------------
//----------------------------Display Time---------------------------------------
ti = millis(); // Initial time for the Timer of Hour/Time
while ((millis() - ti) < 5000) { //Timer of 5 seconds to show the Hour
hora = hour();
minuto = minute();
unidadeHora = hora % 10;
dezenaHora = hora / 10;
unidadeMinuto = minuto % 10;
dezenaMinuto = minuto / 10;
Serial.print("TEMPS = ");
Serial.print(dezenaHora);
Serial.print(unidadeHora);
Serial.print(" : ");
Serial.print(dezenaMinuto);
Serial.println(unidadeMinuto);
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
delay(100); //Wait for half second before go ahead to show the next feature
Serial.println(" ------------------------------------ ");
//-------------------------------------------------------------------------------------------------
//------------------------------------Display Temp----------------------------------------------
ti = millis(); //Initial time for the Timer of Temperature
temp = 10 * (sensor.readTemperature());
while ((millis() - ti) < 5000) { //Timer of 5 seconds for the Temperature
dezenaTemp = temp / 100;
unidadeTemp = (temp/10) % 10;
centmTemp = temp % 10;
Serial.print("TEMPERATURE = ");
Serial.print(dezenaTemp);
Serial.print(unidadeTemp);
Serial.print(".");
Serial.print(centmTemp);
Serial.println(" °C ");
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
delay(100); //Wait for half second before go ahead to show the next feature
Serial.println(" ------------------------------------ ");
//---------------------------------------------------------------------------------
//----------------------------Display Humd------------------------------------------
ti = millis(); //Initial time for the Timer of Humidity
umid = 10 * (sensor.readHumidity());
while ((millis() - ti) < 5000) { //Timer of 5 seconds for the Humidity
dezenaUmid = umid / 100;
unidadeUmid = (umid/10) % 10;
centmUmid = umid % 10;
Serial.print("HUMIDITE = ");
Serial.print(dezenaUmid);
Serial.print(unidadeUmid);
Serial.print(".");
Serial.print(centmUmid);
Serial.println(" % ");
}
//-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------
delay(100); //Wait for half second before go ahead to show the next feature
Serial.println(" ------------------------------------ ");
//---------------------------------------------------------------------------------
}
la commande de lecture du sensor Si7021 à l'extérieur de la boucle while, ce qui implique que le code ne fait qu'une seule lecture de la température et de l'humidité ...
si je déplace la commande de lecture à l'intérieur de la boucle while, j'ai une mise à jour instantané, intéressant mais qui n'est pas bien digéré par mon affichage multiplexé
l'idéale c'est une mise à jour des valeur du sensor Si7021 chaque seconde ... sans que ca implique de problème sur mon affichage multiplexé ...
Ces différentes commandes servent au paramétrage du capteur. La datasheet consacre deux excellents paragraphes à ce sujet.
SI7021_READ_RH() et SI7021_READ_TEMPERATURE() sont deux fonctions qui retournent l'humidité et la température.
En revanche elles doivent avoir un paramètre d'entrée, car il existe différentes manières pour acquérir l'humidité et la température, encore une fois la datasheet est explicite.