Problème moniteur affichage

Bonjour,

J'ai un projet qui est une station météo.
J'ai add une clock en temps réel qui fonctionne très bien avec l'écran LCD.
Sur la deuxième ligne de l'écran 16x2. Je souhaite ajouter une température et l'humidité.
Mon collègue envoi les informations qui sont bien par le moniteur mais pour l'affichage sur l'écran LCD il n'y a que le H qui s'affiche.
Nous avons mis le Mesure==H pour éviter qui continue de lire et qui change sur l'ecran lcd avec la température en premier.
Voici une image du moniteur/code/lcd :
https://image.noelshack.com/fichiers/2019/12/2/1553004651-capture-moniteur.png
https://image.noelshack.com/fichiers/2019/12/2/1553004649-capture-code.png
https://image.noelshack.com/fichiers/2019/12/2/1553004690-img-0192.jpg

J'aimerais donc avoir de l'aide pour le comment du pourquoi il affiche que le H alors que avec un code test il affiche correctement.

Code test :
https://image.noelshack.com/fichiers/2019/12/2/1553004645-capture-code-test.png

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)


Je suis désolé. Merci d'avance.

Envoyer le code avec les bonnes BALISES, comme demandé plus haut
En copie d'écran c'est peu exploitable, en particulier sur smartphone

Comment faire ?

D'autre part les liens à gérer en copier-coller auront peu de 'suiveurs'

'Aidez les aidants'.......facilitez leur le travail, c'est votre intérêt

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

#include <LiquidCrystal.h>
#include<Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;
LiquidCrystal lcd(7,6,5,4,3,2);
int Mesure = 0;
void setup ()
{
Serial.begin(9600);
lcd.begin(16,2);
Wire.begin();
RTC.begin(); // load the time from your computer.
if (! RTC.isrunning())
{
Serial.println("RTC is NOT running!");// This will reflect the time that your sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop ()

{
 if (Serial.available())
  {
   Mesure = Serial.read();
   Serial.write(Mesure);
   if (Mesure == 'H')
   {
    lcd.setCursor(0, 0);
   }
   lcd.write(Mesure);
  }
DateTime now = RTC.now(); //horloge
lcd.setCursor(0, 1);
lcd.print(now.day(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.year(), DEC);
lcd.print(' ');
lcd.print(' ');
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
}
#include <LiquidCrystal.h>

LiquidCrystal lcd(7,6,5,4,3,2);

int Mesure = 0;

void setup ()

{

Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 1);
}

void loop ()

{

  if (Serial.available())
  {
   Mesure = Serial.read();
   Serial.write(Mesure);
  if (Mesure=='H')
  {
    lcd.setCursor(0, 1);
  }
   lcd.write(Mesure);
   
   
  }
}

Je suis désolé voici les codes avec les balises.

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.

Merci de la réponse

//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');

se réécrirait en

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