Bonjour à tous,
J'ai creer un automate capable de gérer une serre extérieure, il relève l'hygro, la température et fais fonctionner des relais, tous çà grâce à arduino.
Aujourd'hui j'ai fini mon code et il fonctionne seul problème si je veux sortir d'une boucle for je suis obliger de faire un reset de la carte.
Ma question est la suivante, une fois que j'ai appuyé sur une touche et que la boucle for se lance, comment faire pour sortir de cette boucle sur simple appuie d'une touche ?
Je vous mets mon code à la suite, merci d'avance.
void loop()
{
char touche = clavier.getKey();
if(touche == NO_KEY)
{
menu();
}
else
{
if(touche == '1')
{
croissance();
}
if(touche == '2')
{
floraison();
}
if(touche == '3')
{
sechage();
}
}
}
void menu()
{
lcd.clear();
lcd.setCursor(1,0);
lcd.print(" Choisir un mode ");
lcd.setCursor(0,1);
lcd.print("1 - MODE CROISSANCE ");
lcd.setCursor(0,2);
lcd.print("2 - MODE FLORAISON ");
lcd.setCursor(0,3);
lcd.print("3 - FIN DE FLORAISON");
delay(2000);
}
void croissance()
{
for(;;)
{
dht.begin();
lcd.begin(20,4);
heure = RTC.get(DS1307_HR,true); // Récupération de l'heure
minut = RTC.get(DS1307_MIN,false);
seconde = RTC.get(DS1307_SEC,false);
date = RTC.get(DS1307_DATE,false);
mois = RTC.get(DS1307_MTH,false);
annee = RTC.get(DS1307_YR,false);
temps_perso = (heure * 100) + minut; //creation temps_perso
float h = dht.readHumidity();
float t = dht.readTemperature();
if(t > extracteur_on) // Mise en route des Relais en mode croissance
{
digitalWrite(extracteur, HIGH);
}
if(t < extracteur_off)
{
digitalWrite(extracteur, LOW);
}
if(t > intracteur_on){
digitalWrite(intracteur, HIGH);
}
if(t < intracteur_off){
digitalWrite(intracteur, LOW);
}
if(temps_perso > lampe_on && temps_perso < lampe_off)
{
digitalWrite(lampe,HIGH);
}
else
{
digitalWrite(lampe, LOW);
}
if(minut > 15 && minut < 30 || minut > 45 && minut < 59)
{
digitalWrite(brasseur,HIGH);
}
else
{
digitalWrite(brasseur,LOW);
}
lcd.setCursor(0,0); // Début affichage page 1 LCD
lcd.print(" MODE CROISSANCE ");
lcd.setCursor(0,1);
lcd.print("TEMPERATURE ");
lcd.print(t);
lcd.print(" C");
lcd.setCursor(0,2);
lcd.print("HYGROMETRIE ");
lcd.print(h);
lcd.print(" %");
lcd.setCursor(7,3);
if(digitalRead(lampe) == HIGH)
{
lcd.print("LAMPE ALLUMEE");
}
else
{
lcd.print("LAMPE ETEINTE");
}
lcd.setCursor(0,3);
if (heure < 10)
{
lcd.print("0");
}
lcd.print(RTC.get(DS1307_HR,true));
lcd.print("H");
if (minut < 10)
{
lcd.print("0");
}
lcd.print(RTC.get(DS1307_MIN,false));
lcd.print(" ");
delay(5000);
lcd.clear();
lcd.setCursor(0,0); // début page 2 de l'écran LCD
lcd.print("EXTRA ");
lcd.setCursor(7,0);
if(digitalRead(extracteur) == HIGH)
{
lcd.print("ON ");
}
else
{
lcd.print("OFF");
}
lcd.setCursor(0,1);
lcd.print("INTRA ");
lcd.setCursor(7,1);
if(digitalRead(intracteur) == HIGH)
{
lcd.print("ON ");
}
else
{
lcd.print("OFF");
}
lcd.setCursor(0,2);
lcd.print("BRASS ");
lcd.setCursor(7,2);
if(digitalRead(brasseur) == HIGH)
{
lcd.print("ON ");
}
else
{
lcd.print("OFF");
}
lcd.setCursor(0,3);
if (heure < 10)
{
lcd.print("0");
}
lcd.print(RTC.get(DS1307_HR,true));
lcd.print("H");
if (minut < 10)
{
lcd.print("0");
}
lcd.print(RTC.get(DS1307_MIN,false));
lcd.print(" ");
delay(5000);
}
}
Je n'ai pas mis la totalité du code juste la loop et 1 programme, je travail avec un keypad 4*4.