Bonsoir ,
Désolé de réitérer mon sujet, mais il semble avoir disparu (ai-je eu une connexion internet défaillante ? ).
J’essaie de faire un système de ouverture - fermeture de porte avec le jour, en utilisant un pont en H fait de 2 fois 2 relais.cela marche, mais ça boucle sans arret,j’ai essayer avec while,break,do-while, le système de la machine à états (JML), mais je n’y arrive pas.
Merci de votre aide
//MARCHE BIEN MAIS RECOMENCE A OUVRIR OU FERMER LA PORTE A CHAQUE TOUR ( car se base sur nouvelle mesur ) MEME SI DEJA FAIT = ON FERME UNE PORTE FERMEE OU ON OUVRE UNE PORTE OUVERTE = VA PAS
Constantes
RELAIS DU PONT EN H
const int relais1 = 2;
const int relais2 = 4;
const int relais3 = 7;
const int relais4 = 8;
// déclation interrupteur haut et bas de course
int n=0;
// /INTERRUPTEUR ARRET FERMETURE ( en BAS )
int pinInterrupteurBAS = 11;
int etatInterrupteurBAS ;
// INTERRUPTEUR ARRET OUVERTURE ( en HAUT )
int pinInterrupteurHAUT = 12;
int etatInterrupteurHAUT ;
//le PULLUP fait que c'est 1 quand il n'y a contact ( vérifié .)
// -LE 1 ET LE 4 MARCHENT ENSEMBLE + ON DIT JOUR
// //LE 2 ET LE 3 MARCHENT ENSEMBLE + ON DIT NUIT
// HIGH = PAS DE COURANT
// LOW = COURANT
//PHOTORESISTANCE
int photoresistancePin = 0; // la photorésistance et le pulldown 10Kohms sont connectés à A0
int photoresistanceReading; // lecture de résistance analogique
// BRANCHEMENTS = ( CHOIX DES PINS DIGITAL SANS PWM )
// relais1 sur DIGITAL 2 FIL VIOLET
// relais2 sur DIGITAL 4 FIL JAUNE
// relais3 sur DIGITAL 7 FIL ORANGE
// relais4 sur DIGITAL 8 FIL BLEU
// / PHOTORESISTANCE ( 5549 ) sur A0 NE PAS OUBLIER LA RESISTANCE DE 10 KILO-OHMS !!
void setup() {
Serial.begin(9600);
//declaration des pins pour les relais en sortie=
pinMode (relais1, OUTPUT);
pinMode (relais2, OUTPUT);
pinMode (relais3, OUTPUT);
pinMode (relais4, OUTPUT);
//declaration de la pin pour la photoresistance en entrée=
pinMode (photoresistancePin, INPUT);
//declaration de la pin pour les interrupteurs en entrée PULLUP ( evite rebonds)=
pinMode (pinInterrupteurBAS, INPUT_PULLUP);
pinMode (pinInterrupteurHAUT, INPUT_PULLUP);
// ETAT DE DEPART (pas de courant )
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
digitalWrite(relais3, HIGH);
digitalWrite(relais4, HIGH);
}
void loop()
{
// ETAT DE DEPART (pas de courant )
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
digitalWrite(relais3, HIGH);
digitalWrite(relais4, HIGH);
Serial.println(" - debut = eteint");
delay (2000);
// INTERRUPTEURS
etatInterrupteurBAS = digitalRead (pinInterrupteurBAS);
etatInterrupteurHAUT = digitalRead (pinInterrupteurHAUT);
//PHOTORESISTANCE
Serial.println(" LECTURE LUMIERE");
photoresistanceReading = analogRead(photoresistancePin);
Serial.print("Analog reading = ");
Serial.print(photoresistanceReading); // la lecture analogique
// Nous aurons quelques seuils,à déterminer qualitativement par des essais
if (photoresistanceReading < 150) { // SEUIL A DETERMINER
Serial.println(" - NUIT");
} else if (photoresistanceReading < 200 && photoresistanceReading > 150) { // SEUILS A DETERMINER
Serial.println(" - Sombre ATTENDRE");
} else if (photoresistanceReading > 200) { // SEUIL A DETERMINER
Serial.println(" - JOUR");
}
Serial.println(" FIN LECTURE LUMIERE");
delay(1000); // DUREE DU DELAI A DETERMINER POUR EVITER VA ET VIENT INTEMPESTIFS !!
// ACTIVATION OU DESACTIVATION DES RELAIS 2 PAR 2 POUR ACTIONNER LE MOTEUR
//cas 1) JOUR : CONDITION POUR FAIRE DECLENCHER LE MOTEUR DANS UN SENS ( ouverture )=
if (photoresistanceReading > 200) { //LE JOUR SE LEVE (ou une lumiére se promène : phare ....)
Serial.println(" - JOUR ET attente par securité");
delay (2000); // permet de ne pas ouvrir si lumiere intempestive passe (10 minutes d'attente par securité)
}
if (photoresistanceReading < 200) { // là , c'est encore la nuit , la porte reste fermée
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
digitalWrite(relais3, HIGH);
digitalWrite(relais4, HIGH);
Serial.println(" c'est encore la nuit , la porte reste fermée RIEN");
}
else {
// là , c'est bien le jour , la porte s'ouvre
digitalWrite(relais1, LOW);
digitalWrite(relais2, HIGH);
digitalWrite(relais3, HIGH);
digitalWrite(relais4, LOW);
Serial.println(" - JOUR 0 =1/4 allumés");
delay(5000);
// là le Moteur tourne 1 seconde DONC A DETERMINER EN MESURANT LE TEMPS QU'IL FAUT AU MOTEUR POUR LEVER LA PORTE
// PUIS ARRET COMPLET DU MOTEUR , LA PORTE RESTE OUVERTE
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
digitalWrite(relais3, HIGH);
digitalWrite(relais4, HIGH);
Serial.println(" - JOUR 1 ARRET DU MOTEUR = eteint");
delay(2000);
}
Serial.print(etatInterrupteurHAUT);
Serial.print(446);
// le moteur ne reçoit plus de courant, il reste comme cà
// cas 2 AUBE / CREPUSCULE
if (photoresistanceReading > 100 && photoresistanceReading < 200) { //PERIODE INCERTAINE , PERMET QUE LA PORTE NE FASSE PAS DES ALLER-RETOUR SANS ARRET
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
digitalWrite(relais3, HIGH);
digitalWrite(relais4, HIGH);
Serial.println(" - JOUR -nuit --- RIEN NE BOUGE = eteint");
delay (2000); // permet de ne pas fermer si un gros nuage noir passe (10 minutes d'attente par securité)
}
// RIEN NE BOUGE
// cas 3 // la nuit arrive NUIT
if (photoresistanceReading < 100 ) {
delay (2000); // permet de ne pas fermer si un gros nuage noir passe (10 minutes d'attente par securité)
Serial.println(" -ARRIVEE DE LA NUIT -ATTENTE SECURITE ");
}
if (photoresistanceReading > 200) { // là , c'est encore le jour , la porte reste ouverte
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
digitalWrite(relais3, HIGH);
digitalWrite(relais4, HIGH);
Serial.println(" - JOUR 2 -- attente que la nuit soit bien tombée = eteint");
delay (2000);
}
else { // là , c'est bien la nuit , la porte se ferme
digitalWrite(relais1, HIGH);
digitalWrite(relais2, LOW);//------------------------
digitalWrite(relais3, LOW);//-----------------
digitalWrite(relais4, HIGH);
Serial.println(" - NUIT1 = 2/3 allumés");
delay (5000); // là le Moteur tourne 5 seconde DONC A DETERMINER EN MESURANT LE TEMPS QU'IL FAUT AU MOTEUR POUR baisser LA PORTE
// PUIS ARRET COMPLET DU MOTEUR , LA PORTE RESTE FERMEE
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
digitalWrite(relais3, HIGH);
digitalWrite(relais4, HIGH);
Serial.println(" - NUIT2 ARRET COMPLET DU MOTEUR , LA PORTE RESTE FERMEE = eteint");
delay (1000);
Serial.print(etatInterrupteurBAS);
Serial.print(22);
}
}
// le moteur ne reçoit plus de courant, il reste comme cà, et attend