Activer une sortie digital et afficher un caractère sur un lcd en même temps

Bonsoir,

Voila mon soucis je réalise un thermostat pour un chauffage le plus gros du code et effectuer et fonctionnel mais je souhaite en plus d’activé une sortie digital pour mon relais qui a sont tour active le chauffage afficher sur mon LCD un caractère (une petite flamme ) dans un coin pour me dire l’état de ma sortie digital.

en PJ mon code si sa peut aider a voir mon soucis ??? :slight_smile:

/***********************************/
/*          Déclaratioins          */
/***********************************/

/* Declaration pour affichage LCD */
  #include <Wire.h>
  #include <LiquidCrystal_I2C.h>
  LiquidCrystal_I2C lcd(0x27,20,4);

/* Potentiometre pour temperature demander */
  long portPotentiometre = A0;
  long valeurPotentiometre;
  
/* Capteur de température interieur */
  long portCapteurInterieur = A1;
  long valeurCapteurInterieur;

/* Creationde des caractere speciaux affichage LCD */
  /* Creation du signe degre */
    byte degre[8] = { //attribution du Nom est du nombre de [bits utiliser]
      0b11100,
      0b10100,
      0b11100,
      0b00000,
      0b00111,
      0b00100,
      0b00100,
      0b00111,
};
  /* Creation du signe flamme */
    byte flamme[8] = { //attribution du Nom est du nombre de [bits utiliser]
      0b00000,
      0b00000,
      0b00000,
      0b01010,
      0b10001,
      0b01010,
      0b10101,
      0b11111,
};
/***********************************/
/*          Initialisation         */
/***********************************/
void setup() {
  
  /* Initialisation pour affichege LCD */
    lcd.init();
    lcd.backlight();
    /*Attribution des numero au caractere cree en haut dans initialisation*/
      lcd.createChar(0,degre);
      lcd.createChar(1,flamme);
  /* Sortie relais */ 
    pinMode(2, OUTPUT);
  /* 
}

/***********************************/
/*          Boucle Infinie         */
/***********************************/
void loop() {
  
/* Temperature demander */
  valeurPotentiometre = analogRead(portPotentiometre);
  valeurPotentiometre = valeurPotentiometre*26/1023+10;
  
/* Affichage LCD Temperature demander */
  lcd.setCursor(0,1);
  lcd.print("Je veux :");
  lcd.print(valeurPotentiometre);
  lcd.write(byte(0));

/* Temperature Interieur*/
  valeurCapteurInterieur = analogRead(portCapteurInterieur);
  valeurCapteurInterieur = valeurCapteurInterieur*45/1023+10;
  
/*Affichage LCD Temperature Interieur */
  lcd.setCursor(0,0);
  lcd.print("Il fait :");
  lcd.print(valeurCapteurInterieur);
  lcd.write(byte(0));
  
/* Affichage lcd etat chaudiére */

/* Activation du relais */ 
  if(valeurCapteurInterieur<=valeurPotentiometre-2) digitalWrite(2, HIGH);
  if(valeurCapteurInterieur>=valeurPotentiometre) digitalWrite(2, LOW);
  
 }

merci d’avance pour votre aide.

sketch_oct10a_.ino (2.22 KB)

A priori, rien de bien compliqué ni de différent de ce que tu as déjà fait. Tu sais comment afficher ton caractère ‘flamme’. Il suffit de savoir quand l’afficher (et où) et quand l’effacer. Pour l’effacer, tu écris un espace à la place.

Donc ça donnerait ça :

/* Activation du relais */ 
  if(valeurCapteurInterieur<=valeurPotentiometre-2) {
    digitalWrite(2, HIGH);
    lcd.setCursor(20,0);
    lcd.write(byte(1));
  }
  if(valeurCapteurInterieur>=valeurPotentiometre) {
    digitalWrite(2, LOW);
    lcd.setCursor(20,0);
    lcd.write(" ");
  }

Merci je n'est pas encor teste cette solution je vais essayer. Encore merci

Je viens de teste l’affichage fonctionne mais quand le relais passe a l’état 0 sur le LCD il reste un caractère afficher a l’écran j’ai donc remplacer

/* Activation du relais */ 
  if(valeurCapteurInterieur<=valeurPotentiometre-2) {
  digitalWrite(2, HIGH);
  lcd.setCursor(20,0);
  lcd.write(byte(1));
  }
  if(valeurCapteurInterieur>=valeurPotentiometre){ 
  digitalWrite(2, LOW);
  lcd.setCursor(20,0);
  lcd.write(" ");//Remplacer lcd.write(""); par lcd.print(" "); pour ne pas avoir le caractère relais désactiver
  }

Remplacer lcd.write(""); par lcd.print(" "); pour ne pas avoir le caractère relais désactiver

Encore merci. :slight_smile:

Bonjour,

lesept à fait une petite faute de frappe. Ce n'est pas lcd.write(" "); mais lcd.write(' '); pour afficher un espace.