affichage 2èm capteur DS18B20 sur écran LCD

Bonjour, mon projet consiste: la surveillance à distance de 4 capteurs de
températures avec les modules HC12 sur écran LCD 20x4.
Mais je n'arrive pas à afficher la valeur du 2èm capteur sur l'écran LCD du
RX / HC12 (par la suite il y en aura 4).
Le code fonctionne très bien pour le moniteur du TX / HC12 et RX / HC12
j'ai bien les capteurs et les valeurs trouvées et affichées sur les deux.
Merci de votre aide.
Je vous laisse le code.

 // ==================== TX HC12 ======================
  #include <OneWire.h>
  #include <DallasTemperature.h>
  #define ONE_WIRE_BUS 2  // capteur DS18B20 sur pin 2
  OneWire oneWire ( ONE_WIRE_BUS ) ;
  DallasTemperature sensors ( & oneWire ) ; 
  int deviceCount = 0 ;
  float Celcius ;
  void setup ( )
  {
  Serial . begin ( 9600 ) ;
  sensors . begin ( ) ;
  // localise les capteurs sur le bus :
  Serial . println ( " localisation des capteurs : " ) ;
  Serial . print ( " capteurs trouvés : " ) ;
  deviceCount = sensors . getDeviceCount ( ) ;
  Serial . print ( deviceCount )    ;
  Serial . println ( " capteurs " ) ;
  Serial . println ( ) ;
  }
  void loop ( )
  {
  sensors . requestTemperatures ( ) ;
  for ( int i = 0 ; i < deviceCount ;  i ++ )
  {
  Celcius = sensors . getTempCByIndex ( i ) ;
  Serial . print ( Celcius ) ;
  Serial . print ( "° C " )  ;
  Serial . print ( " capteur " ) ;
  Serial . println ( i + 1 ) ;
  }
  Serial . println ( ) ;
  delay ( 1000 ) ;
  }
  // ==================== RX HC12 ======================
  #include <Wire.h>
  #include <LiquidCrystal_I2C.h>
  LiquidCrystal_I2C lcd ( 0x27 , 20 , 4 ) ;
  String readString ;
  void setup ( ) 
  {
  Serial . begin ( 9600 ) ;
  Serial . println ( "température capteurs : " ) ;
  Serial . println ( ) ; // saut de ligne .
  lcd . begin ( ) ; 
  }  
  void loop ( )
  {
  while ( Serial . available ( ) ) 
  {
  char c = Serial . read ( ) ;  // prend 1 octet du tampon . 
  readString += c ; // rend la chaine readString .
  delay ( 2 ) ; // boucle lente pour que la mémoire se
  // remplisse avec le caractère suivant .  
  }
  if ( readString . length ( ) > 0 ) // renvoie la longueur de la
  // chaine en caractères .
  {
  Serial . print ( readString ) ; // pour voir la chaine capturée .
  float n = readString . toFloat ( ) ; 
  // convertit readString en un nombre .
  lcd . setCursor ( 0 , 0 )   ;
  lcd . print ( "capteur 1: " ) ;
  lcd . setCursor ( 11 , 0 )   ;
  lcd . print ( n ) ;
  lcd . print ( ( char ) 223 ) ; // symbole ° ( degrés ) .
  lcd . print ( "C " ) ;
  
  lcd . setCursor ( 0 , 1 )   ;
  lcd . print ( "capteur 2: " ) ;
  lcd . setCursor ( 11 , 1 )   ;
  lcd . print ( ? ) ;
  lcd . print ( ( char ) 223 ) ; // symbole ° ( degrés ) .
  lcd . print ( "C " ) ; 
  readString = "" ;
  }  }

hello
un code qui a deux setup et deux loop et qui donc ne compile pas, t'aurait affiché au moniteur les valeurs de tes sondes ??????????????????????

Mais je n'arrive pas à afficher la valeur du 2èm capteur sur l'écran LCD

Bonsoir dsl mes 2 codes TXHC12 et RX HC12 compilent
et fonctionnent parfaitement , je n'arrive pas à écrire la
valeur du capteur 2 sur l'écran LCD tout simplement .
voir : lcd . print ( ? ) ;
merci de votre aide .

azerthuiop:
Mais je n'arrive pas à afficher la valeur du 2èm capteur sur l'écran LCD du

j'ai bien les capteurs et les valeurs trouvées et affichées sur les deux.

c'est contradictoire ou mal exprimé ?

où sont branchés les hc12 ? sur les pins tx/rx arduino puisque on ne voit pas de SoftwareSerial ?

Bonjour ,les TX et RX du HC12 sont branchés sur les TX RX de l'arduino.
Pas besoin de SoftwareSerial. ( TX avec RX et RX avec TX )
Si vous compilez le code du TX et le code du RX dans chaque HC12 vous
verrez qu'ils compilent parfaitement.

Lis bien les réponses qui t'ont été faite au lieu de dire que tu n'as pas fait d'erreur et accuser je ne sais quoi.

Si on se base sur ce que tu nous as transmis on déduit que :

  1. tu as fait un premier programme avec un setup et un loop.

  2. tu as fait un deuxième programme avec un setup et un loop
    Tu dis que cela fonctionne séparément et on te croit.

  3. tu as assemblé bout à bout les deux programmes précédent dans un seul fichier programme et donc tu as bien deux fonctions setup et deux fonctions loop et CELA NE PEUT PAS COMPILER.
    C'est interdit quel que soit le langage de programmation .

Ou tu n'as pas fait comme tu dis, ou tu as obligatoirement eu des messages d'erreur à la compilation.

Donc qu'as tu fait exactement ?

Bonjour,

  • Il faut que tu envoies les informations sous une forme facilement décodable par le récepteur. Par exemple
    n°capteur espace température line feed
    ex: 1 21.20\n

  • Le récepteur n'a plus qu'à décoder le message pour connaitre le numéro de capteur et la température.
    Ca donne quelquechose comme ça:
    TX

// ==================== TX HC12 ======================
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2  // capteur DS18B20 sur pin 2
OneWire oneWire ( ONE_WIRE_BUS ) ;
DallasTemperature sensors ( & oneWire ) ;
int deviceCount = 0 ;
float Celcius ;
void setup ( )
{
  Serial . begin ( 9600) ;
  sensors . begin ( ) ;
  // localise les capteurs sur le bus :
  Serial . println ( " localisation des capteurs : " ) ;
  Serial . print ( " capteurs trouvés : " ) ;
  deviceCount = sensors . getDeviceCount ( ) ;
  Serial . print ( deviceCount )    ;
  Serial . println ( " capteurs " ) ;
  Serial . println ( ) ;
}
void loop ( )
{
  sensors . requestTemperatures ( ) ;
  for ( int i = 0 ; i < deviceCount ;  i ++ )
  {
    Celcius = sensors . getTempCByIndex ( i ) ;
    Serial.print(i);
    Serial.print(' ');
    Serial.println(Celcius);
  }
  delay ( 1000 ) ;
}

RX

// ==================== RX HC12 ======================
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd ( 0x27 , 20 , 4 ) ;

void setup ( )
{
  Serial . begin (9600) ;
  Serial . println ( "température capteurs : " ) ;
  Serial . println ( ) ; // saut de ligne .
  lcd . begin ( ) ;
}
void loop ( )
{
  if (Serial.available())
  {
    char bufRec[10];
    int n = Serial.readBytesUntil('\n', bufRec, sizeof bufRec - 1);
    bufRec[n] = 0; // fin de chaine
//    Serial.print(bufRec);
    byte nCapt = atoi(bufRec); // numéro capteur
    float temp = atof(bufRec + 2); // température

    // affiche la température
    lcd.setCursor (0,nCapt);
    lcd.print ("capteur ") ;
    lcd.print(nCapt+1);
    lcd.print(": ");
    lcd.print(temp);
    lcd.print(( char ) 223); // symbole ° ( degrés ) .
    lcd.print("C ");
  }
}

Bonjour Kamill merci pour le coup de main j'essai ça des que je rentre du boulot.
je vous tiens au courant ,Merci encore et bonne journée.

Votre code fonctionne très bien , il y a que le capteur 3 qui ne s'affiche pas
sur l'écran LCD , par contre dans les moniteurs TX et RX le comptage se fait bien.
Mais quand je fais un réset sur le RX j'ai le capteur 3 qui s'affiche mais ne varie
pas au différence de température elle reste fixe .
J'ai essayé plusieurs capteurs au cas où il soit défectueux mais rien ni fait
j'ai même inversé les fils du bus idem valeur capteur 3 fixe .
Pour résumé quand je compile le RX je n'ai pas le capteur 3 qui s'affiche sur
l'écran LCD , et quand je fais un réset sur le RX le capteur 3 s'affiche mais la
température reste fixe .
Merci de votre aide .

Tu as bien une résistance de pullup?

Le problème venait de //Serial.print(bufRec); que j'avais
décoché pour voir les infos sur le moniteur du RX ,
il ne fallait surtout pas faire ça . :confused:
votre code fonctionne parfaitement bien comme d'habitude :slight_smile:
mille merci à vous et bonne soirée.

Super. Bonne continuation.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.