Bonjour à tous, je viens de me rendre compte que mon code ne fonctionne plus, et se bloque quand je rentre dans la boucle while
// si la cloture1 est éteinte depuis plus de 20 s, on prévient tout le monde en envoyant un push
while ( cloture1Allume == false && tempsdepasse == false){
if (millis()-tempscloturearret >= 20000) {
sendToPushingBox(DEVID5);
tempsdepasse = true;
}}
Quand la condition se trouvant dans le while est rempli, je ne parviens plus à rallumer la clôture
C'est uniquement quand la condition du if devient vrai que je sors de la boucle while et enfin je peux rallumer. Pourtant, je dois pouvoir allumer immédiatement après avoir éteint, sans etre obligé d'attendre le délai des 20 s
voici mon code : Comment puis je faire pour eviter ça , merci d'avance !
// ---------------------------------------------------------------------------------------------------------
//------------------------------ GESTION DE L'APPUI SUR LE BOUTON DE LA CLOTURE 1--------------------------------
if (val == HIGH && precedetat == LOW) {
etatbouton = !etatbouton;
delay(10);
}
precedetat = val;
if (etatbouton == 0 && cloture1Allume == true) { // si bouton n'a pas encore été appuyé et cloture allumée
lcd.setCursor(0, 0);
lcd.print("Clot1. ON.Bouton ");
}
if (etatbouton == 1 && cloture1Allume == true) { // si bouton appuyé et cloture allumée
cloture1Allume = false;
lcd.setCursor(0, 0);
lcd.print("Clot1.OFF.Bouton ");
} // alors on éteint
if (etatbouton == 0 && cloture1Allume == false) { // si bouton pas appuyé et cloture éteinte
cloture1Allume = true;
lcd.setCursor(0, 0);
lcd.print("Clot1. ON.Bouton "); // alors on allume
}
if (etatbouton == 0 && cloture1Allume == true && clotureOFFiphone == true) { // si bouton pas appuyé, cloture allumé et iphone Off
cloture1Allume = false;
lcd.setCursor(0, 0);
lcd.print("Clot1.OFF.Iphone ");
} // alors on éteint
if(cloture1Allume == false && clotureOFFiphone == true && etatbouton == 1){ // si bouton appuyé, alors que l'iphone a éteint, on peut rien faire
lcd.setCursor(0, 0);
lcd.print("Manip.impossible");
delay(1000);
etatbouton = 0;
}
//---------------------------------CONNEXION AU SERVEUR-------------------------
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
stringInput = "";
if (client.connected()) {
while (client.available()) {
char c = client.read();
if (stringInput.length() < sizeString) {
stringInput.concat(c);
}
if (c == '\n' && currentLineIsBlank) {
digitalRead(Cloture1);
client.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
client.println("<agridomotique>");
// Pin 30 Cloture1
client.print("<Pin>");
client.print("<namePin>CLOTURE 1</namePin>");
client.print("<Etat>");
if (cloture1Allume == 1) {
client.print (" ALLUMEE");
}
if (cloture1Allume == 0) {
client.print (" ETEINTE");
}
client.print("</Etat>");
client.print("</Pin>");
client.println("</agridomotique>");
break;
}
if (c == '\n') {
Serial.print(stringInput);
Serial.println();
if (stringInput.indexOf("GET") != -1) {
// si iphone ON
if (stringInput.indexOf("Cloture1=ON") != -1) {
cloture1Allume = true;
clotureOFFiphone = false;
lcd.setCursor(0, 0);
lcd.print("Clot1. ON.Iphone ");
}
// si off iphone
if ((stringInput.indexOf("Cloture1=OFF") != -1) && (cloture1Allume == true)) {
cloture1Allume = false;
clotureOFFiphone = true;
lcd.setCursor(0, 0);
lcd.print("Clot1.OFF.Iphone ");
}
}
currentLineIsBlank = true;
stringInput = "";
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
}
//----------------------------------------- COMMMANDE , PUSH ET BUZZER de la Cloture 1 --------------------------------------------
if (cloture1Allume == true ) { // ON ALLUME LA CLOTURE1
digitalWrite (Cloture1, HIGH);
digitalWrite (led, HIGH);
tempsdepasse = false;
}
if (cloture1Allume == false ) { // ON ETEINT LA CLOTURE1
digitalWrite (Cloture1, LOW);
digitalWrite (led, LOW);
tempscloturearret = millis();
}
if ( cloture1Allume == true && pushenvoi == true ) { // si la cloture1 est allumé on envoi un push
// On envoi un push allumé
sendToPushingBox(DEVID1);
pushenvoi = false;
}
if ( cloture1Allume == false && pushenvoi == false ) { // si la cloture1 est éteinte en onvoi un push
// On envoi un push éteint
sendToPushingBox(DEVID2);
pushenvoi = true;
}
// si la cloture1 est éteinte depuis plus de 30 mn, on prévient tout le monde en envoyant un push
while ( cloture1Allume == false && tempsdepasse == false){
if (millis()-tempscloturearret >= 20000) {
sendToPushingBox(DEVID5);
tempsdepasse = true;
}}
// si la cloture1 est éteinte depuis plus de 30 mn, on prévient tout le monde en actionnant le buzzer
if (tempsdepasse == true)
{ digitalWrite (buzzer, HIGH); // buzzer en route
delay (300);
digitalWrite (buzzer, LOW);
delay (300);
}
}
//---------------------------------Fonction permettant d'envoyer un push PushingBox---------------------
void sendToPushingBox(char devid[]) {
//demarre connexion ethernet
;
Serial.println("connecting...");
if (client2.connect(serverName, 80)) {
Serial.println("connected");
Serial.println("sendind request");
client2.print("GET /pushingbox?devid=");
client2.print(devid);
client2.println(" HTTP/1.1");
client2.print("Host: ");
client2.println(serverName);
client2.println("User-Agent: Arduino");
client2.println("Connection: close");
client2.println();
while (client2.connected ())
if (client2.available ())
Serial.write(client2.read());
client2.stop ();
Serial.println("succes");
}
else {
Serial.println("connection failed");
}
client2.stop();
}
/code]