Bonsoir à tous, je bosse actuellement sur un projet pour mes études,
c'est un programme permettant l'auto-gestion de la luminosité dans une maison connectée, j'ai donc fait un programme qui permet de régler une valeur cible avec un potentiometre, et grace à un capteur, la led se regle automatiquement pour atteindre la valeur cible si celle si n,'est pas atteinte naturellement.
Ce programme marche, mais j'aimerai le regrouper avec un programme de mode manuel et pouvoir choisir entre les deux grace aux boutons 0 et 1 de ma telecommande IR, et c'est la que les choses se compliquent.
le programme marche très bien jusqu'à ce que l'on appuie sur la touche 0 (mode auto),
la, le programme rentre dans la boucle du mode auto et impossible d'en ressortir, étant donné que les valeurs IR ne sont pas " re-testées".
Après avoir lu énormement de pages de forum, Je suis passé par énormement de solution, créer une variable et la tester, avec if, j'ai meme testé avec du bolléen ( static bool flagAuto = true /false ) etc...
Mais aucune ne marche ( ayant pourtant l'air de fonctionner pour les autre, peut-être ne les utilise-je pas correctement).
pouvez-vous m'aider ?
Merci d'avance pour votre réponse
Voici mon programme
const int capteurLuminositePin = A0;
const int potentioPin = A1;
const int RECV_PIN = 11;
const int lumPin = 5;
const int verifPin = 7;
int iValue;
#include <Wire.h>
#include <IRremote.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
//LiquidCrystal_I2C lcd(0x3F,16,2);
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
int valeurCible = analogRead(potentioPin);
irrecv.enableIRIn(); // Start the receiver
int valeurTot = 0;
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Bienvenue");
}
void loop() {
if (irrecv.decode(&results)) {
digitalWrite(verifPin, HIGH);
delay(100);
digitalWrite(verifPin, LOW); // allume une led de vérification qui confirme la reception du signal IR
switch (results.value) {
case 0xB1EFBA9D:
do {
int ValeurT = 0;
int valeurLum = analogRead(capteurLuminositePin);
int valeurCible = analogRead(potentioPin);
int valeurTot = valeurCible - valeurLum;
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("mode auto");
lcd.setCursor(0, 1);
lcd.print("Cible:");
lcd.setCursor(7, 1);
lcd.print(valeurCible);
ValeurT = map(valeurTot, 0, 1023, 0, 255);
if ((valeurTot < 0)) {
analogWrite(lumPin, 0);
}
else {
analogWrite(lumPin, ValeurT);
}
} while (irrecv.decode(&results) == 2985278109);
break;
case 0xDEE522C1:
lcd.setCursor(0, 0);
lcd.print("mode manuel");
break;
}
}
}