Go Down

Topic: Activer une sortie digital et afficher un caractère sur un lcd en même temps (Read 149 times) previous topic - next topic

Seed-Fr

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  ???  :)

Code: [Select]
/***********************************/
/*          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.

lesept

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 :
Code: [Select]
/* 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(" ");
  }
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Seed-Fr

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

Seed-Fr

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
Code: [Select]
/* 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. :)

kamill

Bonjour,

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

Go Up