Ok merci beaucoup, je teste ça et je te dis quoi !
Merci beaucoup!
Grace à toi tout fonctionne comme je veux! Merci!
Je vais installer maintenant les conditions des LEDs, je te tiens au courant!
Juste un question, lorsque je sélectionne le Mode hiver (par exemple) il m'affiche correctement la température, par contre, il ne fais plus de recherche... Que faut t'il ajouter pour qu'il fasse un calcule de température toutes les 30 sec par exemple? J'ai essayé avec un delay mais ça ne fonctionne pas.
Merci de ton aide ![]()
Il faudrait que tu utilises un flag qui indique que tu affiches la température.
Tu le positionnes quand tu appuie sur le bouton sélection et dans ta loop tu mesures et afficha la température sur ce flag est positionné.
Tu remets ce flag à false quand tu affiches le menu.
Du genre :
int valcapt = analogRead(capteur);
float voltage = valcapt * 5.0 / 1024.0;
float temperature = (voltage - 0.5) * 100;
delay(5000);
flag temperature
if (etatBouton2 == HIGH && etatPrecBouton2 == LOW) {
(flag temperature, HIGH)
}
?
Plutôt quelquechose comme ça:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buttonPin = 8;
const int buttonPin2 = 9;
int capteur = A0;
int note = 330;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(buttonPin2, INPUT);
lcd.begin(16, 2);
lcd.print("TEST");
}
void loop() {
static int etatPrecBouton=LOW; // état précédent
static int etatPrecBouton2=LOW;
static int noMenuAffiche=-1; // numéro du menu actuellement affiché (-1 on n'est pas dans un menu)
static int noMenu=0; // numéro du menu
static bool flagTemp=false; // indique qu'on doit afficher la températeure
int etatBouton=digitalRead(buttonPin);
int etatBouton2=digitalRead(buttonPin2);
if (etatBouton == HIGH && etatPrecBouton == LOW) {
// appui sur le bouton menu
noMenu++;
noMenu%=2;
flagTemp=false; // on affiche le menu et non la température
}
if (noMenu!=noMenuAffiche)
{
// affiche le menu
lcd.clear();
if (noMenu==0)
lcd.print('>');
else
lcd.print(' ');
lcd.print("mode ete");
lcd.setCursor(0,1); // 2eme ligne
if (noMenu==1)
lcd.print('>');
else
lcd.print(' ');
lcd.print("mode hiver");
noMenuAffiche=noMenu;
}
if (etatBouton2 == HIGH && etatPrecBouton2 == LOW) {
// selection du menu
lcd.clear();
if (noMenu==0)
lcd.print("mode ete");
else
lcd.print("mode hiver");
flagTemp=true; // on doit afficher la température
}
if (flagTemp)
{
int valcapt = analogRead(capteur);
float voltage = valcapt * 5.0 / 1024.0;
float temperature = (voltage - 0.5) * 100;
Serial.print( "température : ");
Serial.print(temperature);
Serial.println(" C ");
lcd.setCursor(0,1); // 2eme ligne
lcd.print("Temp:");
lcd.print(temperature);
}
etatPrecBouton=etatBouton;
etatPrecBouton2=etatBouton2;
delay(10);
}
Ah ok merci beaucoup ![]()
Jusqu'ici ça fonctionne, je vais essayer le code avec le flag
Salut!
Merci à toi, cela fonctionne! Par contre maintenant quand je ré-appuie sur le bouton menu lorsque j'ai un menu sélectionné, il n revient pas au menu principale comme le code précédent... Sais-tu m'aider?
J'ai regardé plusieurs fois par rapport au précédent code, mais je ne vois pas la différence... Un bug peut-être?
normalement tu devrais retourner au menu en appuyant sur le bouton1
si tu veux aussi retourner au menu en appuyant sur bouton2 il faut tester si on et déjà en mode température lorsqu'on appuie sur bouton2
ce qui donne:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buttonPin = 8;
const int buttonPin2 = 9;
int capteur = A0;
int note = 330;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(buttonPin2, INPUT);
lcd.begin(16, 2);
lcd.print("TEST");
}
void loop() {
static int etatPrecBouton=LOW; // état précédent
static int etatPrecBouton2=LOW;
static int noMenuAffiche=-1; // numéro du menu actuellement affiché (-1 on n'est pas dans un menu)
static int noMenu=0; // numéro du menu
static bool flagTemp=false; // indique qu'on doit afficher la températeure
int etatBouton=digitalRead(buttonPin);
int etatBouton2=digitalRead(buttonPin2);
if (etatBouton == HIGH && etatPrecBouton == LOW) {
// appui sur le bouton menu
noMenu++;
noMenu%=2;
flagTemp=false; // on affiche le menu et non la température
}
if (noMenu!=noMenuAffiche)
{
// affiche le menu
lcd.clear();
if (noMenu==0)
lcd.print('>');
else
lcd.print(' ');
lcd.print("mode ete");
lcd.setCursor(0,1); // 2eme ligne
if (noMenu==1)
lcd.print('>');
else
lcd.print(' ');
lcd.print("mode hiver");
noMenuAffiche=noMenu;
}
if (etatBouton2 == HIGH && etatPrecBouton2 == LOW) {
if (flagTemp==false)
{
// selection du menu
lcd.clear();
if (noMenu==0)
lcd.print("mode ete");
else
lcd.print("mode hiver");
flagTemp=true;
}
else
{
// on retourne au menu
flagTemp=false;
noMenuAffiche=-1;
}
}
if (flagTemp)
{
int valcapt = analogRead(capteur);
float voltage = valcapt * 5.0 / 1024.0;
float temperature = (voltage - 0.5) * 100;
Serial.print( "température : ");
Serial.print(temperature);
Serial.println(" C ");
lcd.setCursor(0,1); // 2eme ligne
lcd.print("Temp:");
lcd.print(temperature);
}
etatPrecBouton=etatBouton;
etatPrecBouton2=etatBouton2;
delay(10);
}
Ok merci beaucoup ![]()
Non, j'avais beau appuyer, il ne retournait pas au menu ...
Salut!
Cela ne fonctionne pas :/, et si au lieu de mettre flagtemp==false, on met dans la condition du mode que si on appuis sur le button 1 il repasse au menu?
Ca devrait fonctionner
Le choix du menu et la selection et affichage température fonctionne bien?
Oui parfaitement même
Même les leds s'allument bien ...
Mets ton dernier code
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buttonPin = 8;
const int buttonPin2 = 9;
int capteur = A0;
int note = 330;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(buttonPin2, INPUT);
lcd.begin(16, 2);
lcd.print("TEST");
pinMode(10, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
static int etatPrecBouton=LOW; // état précédent
static int etatPrecBouton2=LOW;
static int noMenuAffiche=-1; // numéro du menu actuellement affiché (-1 on n'est pas dans un menu)
static int noMenu=0; // numéro du menu
static bool flagTemp=false; // indique qu'on doit afficher la températeure
int etatBouton=digitalRead(buttonPin);
int etatBouton2=digitalRead(buttonPin2);
if (etatBouton == HIGH && etatPrecBouton == LOW) {
// appui sur le bouton menu
noMenu++;
noMenu%=2;
flagTemp=false; // on affiche le menu et non la température
}
if (noMenu!=noMenuAffiche)
{
// affiche le menu
lcd.clear();
if (noMenu==0)
lcd.print('>');
else
lcd.print(' ');
lcd.print("Mode ete");
lcd.setCursor(0,1); // 2eme ligne
if (noMenu==1)
lcd.print('>');
else
lcd.print(' ');
lcd.print("Mode hiver");
noMenuAffiche=noMenu;
}
if (etatBouton2 == HIGH && etatPrecBouton2 == LOW) {
// selection du menu
lcd.clear();
if (noMenu==0){
lcd.print("Mode ete");
flagTemp=true;
if( flagTemp > 25){
digitalWrite(13,HIGH);
digitalWrite(10,LOW);
}
else{
digitalWrite(10,HIGH);
digitalWrite(13,LOW);
}
}
if (noMenu==1){
lcd.print("Mode hiver");
flagTemp=true; // on doit afficher la température
if( flagTemp > 17){
digitalWrite(10,HIGH);
digitalWrite(13,LOW);
}
else{
digitalWrite(13,HIGH);
digitalWrite(10,LOW);
}
}
}
if (flagTemp)
{
int valcapt = analogRead(capteur);
float voltage = valcapt * 5.0 / 1024.0;
float temperature = (voltage - 0.5) * 100;
Serial.print( "température : ");
Serial.print(temperature);
Serial.println(" C ");
lcd.setCursor(0,1); // 2eme ligne
lcd.print("Temp:");
lcd.print(temperature);
delay(5000);
}
etatPrecBouton=etatBouton;
etatPrecBouton2=etatBouton2;
delay(10);
}
flagTemp ce n'est pas la température, mais un flag qui vaut true ou false don tes comparaisons sont incorrectes
Il faut que tu mettes tés comparaisons après lecture de la température.
Le problème en faisant ça c'est que le programme me dit que "temperature" n'est pas déclaré dans le scop
Il faut mettre les comparaison juste après la lecture température
Alors je mets deux flagtemp? Comme j'ai deux comparaison par mode
flagTemp c'est pour indiquer qu'on est en mode affichage de température. Je ne vois pas pourquoi il y en aurait deux.
Il faut faire le test après la lecture de température
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buttonPin = 8;
const int buttonPin2 = 9;
int capteur = A0;
int note = 330;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(buttonPin2, INPUT);
lcd.begin(16, 2);
lcd.print("TEST");
}
void loop() {
static int etatPrecBouton = LOW; // état précédent
static int etatPrecBouton2 = LOW;
static int noMenuAffiche = -1; // numéro du menu actuellement affiché (-1 on n'est pas dans un menu)
static int noMenu = 0; // numéro du menu
static bool flagTemp = false; // indique qu'on doit afficher la températeure
int etatBouton = digitalRead(buttonPin);
int etatBouton2 = digitalRead(buttonPin2);
if (etatBouton == HIGH && etatPrecBouton == LOW) {
// appui sur le bouton menu
noMenu++;
noMenu %= 2;
flagTemp = false; // on affiche le menu et non la température
}
if (noMenu != noMenuAffiche)
{
// affiche le menu
lcd.clear();
if (noMenu == 0)
lcd.print('>');
else
lcd.print(' ');
lcd.print("mode ete");
lcd.setCursor(0, 1); // 2eme ligne
if (noMenu == 1)
lcd.print('>');
else
lcd.print(' ');
lcd.print("mode hiver");
noMenuAffiche = noMenu;
}
if (etatBouton2 == HIGH && etatPrecBouton2 == LOW) {
if (flagTemp == false)
{
// selection du menu
lcd.clear();
if (noMenu == 0)
lcd.print("mode ete");
else
lcd.print("mode hiver");
flagTemp = true;
}
else
{
// on retourne au menu
flagTemp = false;
noMenuAffiche = -1;
}
}
if (flagTemp)
{
int valcapt = analogRead(capteur);
float voltage = valcapt * 5.0 / 1024.0;
float temperature = (voltage - 0.5) * 100;
Serial.print( "température : ");
Serial.print(temperature);
Serial.println(" C ");
lcd.setCursor(0, 1); // 2eme ligne
lcd.print("Temp:");
lcd.print(temperature);
float consigne;
if (noMenu == 0)
consigne = 25;
else
consigne = 17;
if (temperature > consigne) {
digitalWrite(13, HIGH);
digitalWrite(10, LOW);
}
else {
digitalWrite(10, HIGH);
digitalWrite(13, LOW);
}
}
etatPrecBouton = etatBouton;
etatPrecBouton2 = etatBouton2;
delay(10);
}