Go Down

Topic: Problème projet arduino temperature capteur lcd  (Read 170 times) previous topic - next topic

YanisHazard

Après l'aide reçu de véritable sympathique arduinien du forum français , je me retrouve face à un problème que je ne peux gérer par moi même, grâce aux conseils de personne doué j'ai pu grandement avancé et corrigé certain point de mon projet en m'inspirant de leur idée.
Mon problème est que je veux que l'écran sois vert si la temp est entre 19 inclus et 21 exclu (degres) mais l'écran reste vert en permanence . Et pour le finaliser j'ai des contraintes : en plus de la couleur verte selon les temps au dessus l'écran doit être de couleur rouge si la temp est < 18degres c ou temp >= 22degres
et de couleur orange si attention ! : 18C=<T<19C ou 21<=T<22C
voici mon code
#include <LiquidCrystal.h>
#include "rgb_lcd.h"

rgb_lcd lcd;

const byte colorR = 255;
const byte colorG = 0  ;
const byte colorB = 255;

   
void setup()
{
  Serial.begin(9600); 
 lcd.begin(16, 2); 
       lcd.setRGB(colorR, colorG, colorB);                   

}

void loop()                   
{
 int reading = analogRead(A0);
 float voltage = reading * 5.0;
  voltage /= 1024.0; 
 float temperatureC = (voltage - 0.5) * 100 ;
   
       
        if (19 >= temperatureC < 21) {
          lcd.setRGB(0,255,0); }
       
  lcd.print(temperatureC);
 lcd.print(" Degres ");
 delay(2000);
  lcd.clear();

}

dbrion06

Bon,
votre code est mieux comme ça:
Code: [Select]

#include <LiquidCrystal.h>
#include "rgb_lcd.h"

rgb_lcd lcd;

const byte colorR = 255;
const byte colorG = 0  ;
const byte colorB = 255;

   
void setup()
{
  Serial.begin(9600);
 lcd.begin(16, 2);
       lcd.setRGB(colorR, colorG, colorB);                   

}

void loop()                   
{
 int reading = analogRead(A0);
 float voltage = reading * 5.0;
  voltage /= 1024.0;
 float temperatureC = (voltage - 0.5) * 100 ;
   
       
        if (19 >= temperatureC < 21) {
          lcd.setRGB(0,255,0); }
       
  lcd.print(temperatureC);
 lcd.print(" Degres ");
 delay(2000);
  lcd.clear();

}


Ce qui vous pose pbn ce sont ces deux lignes (je doute que ça se compile)
   if (19 >= temperatureC < 21) {
          lcd.setRGB(0,255,0); }
Je les remplacerais par
Code: [Select]

if (temperature > 21.0) lcd.set(255,0,0); // rouge pour chaud
else { if (temperature > 19.0)  lcd.set(0, 255,0); // vert pour tiède
                               else   lcd.set(0, 0,255); // bleu pour froid
       }

YanisHazard

Merci de votre réponse, le programme se compile belle et bien , et dans votre code les contraintes qui me sont imposés n'y sont pas , celle ci :  si la temp est entre 19 inclus et 21 exclu (degres) mais l'écran reste vert en permanence . Et pour le finaliser j'ai des contraintes : en plus de la couleur verte selon les temps au dessus l'écran doit être de couleur rouge si la temp est < 18degres c ou temp >= 22degres
et de couleur orange si attention ! : 18C=<T<19C ou 21<=T<22C

dbrion06

Bon, j'ai mis des couleurs plus standard.
Je vais faire un effort (en sachant que je coderai l'orange comme un jaune -mélange de vert et de rouge chez RGB- même si on se demande à quoi sert le bleu...

Code: [Select]

#define ORANGE 1
#define VERT 2
#define ROUGE 3
// à la place des lignes incriminées (qui compilent, mais le test est tjrs vrai)

int couleur =  ORANGE;
if ((temperature > 19.0) && (temperature <=21)) couleur = VERT;
if (temperature < 18.0) couleur = ROUGE;
if (temperature >22.0) couleur = ROUGE;
// on a fini lde calculer les couleurs...


if (ORANGE == couleur) lcd.set(255,255, 0);

if (ROUGE == couleur) lcd.set(255,0, 0);
if (VERT== couleur) lcd.set(0,255, 0);

YanisHazard

Bonjour, merci beaucoup , je vais m'inspirer de votre code et produire le bon programme je vous remercie encore.

YanisHazard

Bonsoir , voila ce que j'ai changé dans mon programme

       
        if ((temperatureC >= 19.0) && (temperatureC <21)) {
          lcd.setRGB(0,255,0) ; }
        else if  ( (temperatureC >= 18)  && (temperatureC < 19)  && (temperatureC >= 21) && (temperatureC < 22)) {
          lcd.setRGB (255, 255, 0) ;
          }
          else if  ( (temperatureC < 18) && (temperatureC >= 22) ){
          lcd.setRGB (255, 0, 0) ;
          }
           L'écran ne s'allume qu'en vert quand les conditions pour que la couleur verte sois presente mais lorsque les conditions requises pour l'allumage du rouge par exemple sont reunie et bien rien lecran affiche juste la mesure sans couleur

dbrion06

 if  ( (temperatureC >= 18)  && (temperatureC < 19)  && (temperatureC >= 21) && (temperatureC < 22))
n'aura jamais lieu

 if  ( (temperatureC >= 18)  && (temperatureC < 19)  || (temperatureC >= 21) && (temperatureC < 22))

est plus vraisemblable
Nota: j'ai pris la peine de décomposer en petits bouts, plus lisibles qu'une condition à 4 morceaux, et plus fiables. Pourquoi ne pas recopier le code fourni (même s'il n'est pas testé, il a été vérifié avec un bout de papier et un peu de graphite)

Go Up