Désolé, mais pourriez vous envoyer votre code avec les bonnes balises (si un format d'affichage est absurde, c'est + rapide sur de vieux PC que de suivre vos liens, et on sera bien obligés de vous le demander, ce format d'affichage dans le LCD, de toutes façons)
Si j'ai bien compris, votre collègue a un arduino qui calcule la température et l'humidité et les envoye sur la ligne série
vous avez un autre arduino qui calcule l'heure, recoit les messages de l'arduino externe, les reformatte et laffiche le tout
Une solution simple serait que votre collègue envoye un message de la forme
"T:-14.5C H: 100%"
"123456789012345"
terminé par une fin de ligne...
Ceci se lit très bien par Serial.readBytesUntil (le caractère de terminaison étant la fin de ligne '\n')
qui tient sur un LCD dans une gamme de températures/himidités plus que confortable, et avec un nombre de décimales compatible avec la résolution des capteurs?
Là, vous n'auriez pas à ennuyer l'arduino à reformatter et transmettre des lettres superflues... (je vous ai même rajouté une décimale à la température). Vous n'auriez "qu'à" recopier ce qui vous est transmis....
Merci @dbrion06 Mais j'ai strictement rien compris /:
Ce que vous avez expliqué est exactement la fonction de ma carte et de sa carte.
Je vous donne également le code de mon collègue pour voir :
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 8
void setup()
{
Serial.begin(9600);
//Serial.println("DHT11 Humidity and Temperature Digital Sensor test sketch");
delay(1000);
}
void loop()
{
uint8_t chk = DHT11.read(DHT11PIN);
/* Serial.print("Sensor status: ");
switch (chk)
{
case 0: Serial.println("OK"); break;
case -1: Serial.println("Checksum error"); break;
case -2: Serial.println("Time out error"); break;
case -3: Serial.println("The sensor is busy"); break;
//default: Serial.println("Unknown error"); break; // PAS D4ERREUR
}*/
//humidite
Serial.print("HUM");
Serial.print(':');
Serial.print(DHT11.humidity, DEC);
Serial.print('%');
Serial.print(' ');
Serial.print(' ');
//humidite
Serial.print("TEM");
Serial.print(':');
Serial.print(DHT11.temperature, DEC);
Serial.print('c');
delay(5000);
}
if (Serial.available())
{
Mesure = Serial.read();
Serial.write(Mesure);
if (Mesure=='H')
{
lcd.setCursor(0, 1);
}
lcd.write(Mesure);
Cette portion de code regarde si un caractère a été reçu.
Si le caractère en question est un H tu l'affiches
Sinon tu ne fais rien
Ce morceau de code se répète à l'infini puisqu'il est placé dans loop.
A aucun moment tu ne mémorises le fait que ce H a été reçu et qu'il faudrait peut-être lire la suite du message.
Il ne faut pas perdre de vue que Serial.read() ne lit qu'un caractère à la fois.
Le H signifie le H de « HUM » donc on reçoit le H et ensuite si il reçoit le H il écrit le reste après le H.
Sa marche avec le code seul mais quand on est là clock avec le capteur sa ne marche pas.
Serial.print("T:");
Serial.print(DHT11.temperature, DEC);
Serial.print("C");
Serial.print(" H:");
Serial.print(DHT11.humidity, DEC);
Serial.println('%'); //une fin de ligne rend plus lisible
Verifier que le message tient dans une ligne de LCD ...
Si c'est le cas, l'affichage de la temperature et de l'humidité (je préfère afficher la température d'abord, plus interessante) se fait, dans votre arduino de la façon suivante:
if (Serial.available() {
char buf[20];// un peu sur dimensionné
Serial.readBytesUntil('\n', buf, 16) ; // \n est le caractère de fin de ligne
if (buf[0] == 'T') {
buf[16]=0;
// l'afficher dans le LCD ici
}
}
(nota :
j'ai écrit les codes à la volée: il faut bien vérifier que, en simplifiant les formats de sortie de l'arduino de votre collègue, on ne dépasse pas 16 charactères: alors, la ligne de sortie est prête à être affichée si... elle commence par 'T')
je ne comprends pas pourquoi il faut deux arduini (mesures à l'exterieur): "ça tient" dans un UNO .... de mémoire