bonjour,
une porte de poulailler encore!!!! le programme a été crée avec mes faibles compétence mais la porte fonctionne.
le principe une cellule photoélectrique qui lorsque la valeur descend en dessous de 100 active un L298 et ferme la porte l’arrêt de la porte se fait par l'intermédiaire d'un FDC bon j'ai plusieurs petit pb mais le but est de les résoudre un par un.
je voudrais rajouter une tempo avant la fermeture de la porte (la cellule >100 on attend X min et on ferme la porte)
la fonction "milli" pourrais faire l'affaire mais je ne la comprend pas cela dit un delay est largement suffisant sauf que lorsque je place dans ma boucle if ou dans void fermeture cela ne fonctionne pas le script se bloque
merci de votre aide
le code
/* la cellule photo*/
const int analogInPin = A0; // cellule photoelectrique sur broche A7
int sensorValue = 0; // variable ou est stocké la valeur de la cellule
/*la porte*/
const int moteurA = 6; // moteur porte
const int moteurB = 7; // moteur porte
int ENA = 10; // broche PWM moteur
/* les fin de courses haut et bas */
const int hallhaut = 4; // broche D6 fin de course haut
const int hallbas = 5; // Broche D7 fin de course bas
int sensorValuehaut =0 ; // variable de stockage FDC haut
int sensorValuebas =0 ; // variable de stockage FDC bas
/*bouton poussoir*/
const int bouton = 2; // bouton poussoir sur broche D2
int etatbouton = 0; // variable de stockage du bouton
const int LedVerte =9; // LedVerte connectée sur broche D9
void setup() {
Serial.begin(9600); // port com
pinMode (LedVerte, OUTPUT); // declare la broche LedVerte comme une sortie
pinMode (moteurA, OUTPUT); // declare la broche comme sortie
pinMode (moteurB, OUTPUT); // declare la broche comme sortie
pinMode (ENA, OUTPUT); // declare la broche PWM comme une sortie
pinMode( hallhaut, INPUT); // declare la broche comme une entrée
pinMode( hallbas, INPUT); // declare la broche comme une entrée
pinMode( bouton, INPUT); // declare la broche omme une entree
pinMode (13, OUTPUT); // declare la broche 13 comme une sortie BUZZER
}
/* parametre de d'ouverture et fermeture de la porte */
void ouverture(){ // enclenche l'ouverture de la porte
digitalWrite (ENA, HIGH); // active le L298
digitalWrite (LedVerte, HIGH); // on allume la Led
digitalWrite (moteurA, HIGH); // ouverture porte
digitalWrite (moteurB, LOW); // ouverture porte
analogWrite (ENA,160); // PWM moteur a l'ouverture (0.255)
}
void fermeture(){
//delay(1000); MARCHE PAS !!!!!!!!!!!!!
digitalWrite (ENA, HIGH); // active le L298
digitalWrite (LedVerte, LOW); // on eteint la Led
digitalWrite (moteurA, LOW); // fermeture porte
digitalWrite (moteurB, HIGH); // fermeture porte
analogWrite (ENA, 100); //PWM moteur a la fermeture (0.255)
}
void stop(){
digitalWrite (moteurA, LOW); // arret porte
digitalWrite (moteurB, LOW); // arret porte
}
void loop() {
/* partie affichage sur le moniteur serie*/
Serial.print("cellule = ");
Serial.print(sensorValue); // on imprime la valeur sur le moniteur serie
Serial.print (" FDC haut =");
Serial.print(sensorValuehaut); // on affiche sur le port serie
Serial.print(" FDC bas =");
Serial.print(sensorValuebas); // on affiche sur le port serie
Serial.print(" bouton =");
Serial.println(etatbouton);
/*attention le delay influ sur le temps de reaction des capteurs*/
//delay(100); // tempo pour affichage plus lisible
sensorValue = analogRead(analogInPin); // lecture valeur cellule photoelectrique
sensorValuehaut = digitalRead( hallhaut ); // lecture du capteur a Effet Hall
sensorValuebas = digitalRead( hallbas ); // lecture du capteur a Effet Hall
etatbouton = digitalRead(bouton );// lecture de l'etat du bouton
/*partie lancement du d'ouverture ou fermeture en fonction de la cellule*/
if (sensorValue > 300) // si la valeur lue est correspondante au jour
{
ouverture();
}
if (sensorValuehaut == LOW) // si fin de course haut activé
{
digitalWrite (moteurA, LOW); // arret porte
digitalWrite (moteurB, LOW); // arret porte
//delay(1000); // empeche l'inertie du moteur
digitalWrite (ENA, LOW); // desactive le l298
}
if (sensorValue < 100) // si la valeur lue est correspondante a la nuit
{
//delay (1000); MARCHE PAS !!!!!!!!!!!!!
fermeture();
}
if (sensorValuebas == LOW && sensorValue <100) // si fin de course bas activé et (cellule <100 sinon empeche l'ouverture de la porte)
{
digitalWrite (moteurA, LOW); // arret porte
digitalWrite (moteurB, LOW); // arret porte
delay(1000);
digitalWrite (ENA, LOW); // desactive le l298
}
//delay(1);
}
