Bonjour.
En premier lieu merci de votre indulgence.
Je ne suis pas pertinent du tout sur le sujet, et je manque cruellement de bases sur arduino.
Néanmoins, j’essaie mais je suis certainement très brouillon…
Bon, ceci étant dit, j’ai un système de porte qui se ferme avec 3 conditions, heure, lumière, buttée.
La fermeture s’arrête lorsqu’une autre butée est atteinte.
Le matin ça s’ouvre etc.
Vous l’avez compris, c’est une porte de poulailler.
Ca marche, et je pourrais m’en satisfaire.
Mais non…
Je voudrais que le système soit temporisé, et ajouter un “delay” entre l’atteinte des 3 conditions et le démarrage de la fermeture. C’est ce que j’ai mis dans la partie “SOIR”
J’ai donc mis un “delay” de 20000 dans mon exemple après les conditions if d’heure et de lumière et de buttée…
Ca marche, la fermeture s’active bien après la temporisation.
MAIS, lorsque la butée de fin de course est atteinte, le STOP reprend également ce “delay” et le moteur continue de tourner.
Je ne vois pas pourquoi, et j’ai atteint mes limites sur le sujet.
Merci d’avance pour votre aide et encore votre indulgence.
void loop() {
//module RTC
ds1302_struct rtc;
char buffer[80]; // the code uses 70 characters.
// Read all clock data at once (burst mode).
DS1302_clock_burst_read( (uint8_t *) &rtc);
sprintf( buffer, "Time = %02d:%02d:%02d, ", \
bcd2bin( rtc.h24.Hour10, rtc.h24.Hour), \
bcd2bin( rtc.Minutes10, rtc.Minutes), \
bcd2bin( rtc.Seconds10, rtc.Seconds));
Serial.println(buffer);
sprintf(buffer, "Date(day of month) = %d, Month = %d, " \
"Day(day of week) = %d, Year = %d", \
bcd2bin( rtc.Date10, rtc.Date), \
bcd2bin( rtc.Month10, rtc.Month), \
rtc.Day, \
2000 + bcd2bin( rtc.Year10, rtc.Year));
int ldr = analogRead(A0);
int coursehaut = digitalRead(6);
int coursebas = digitalRead(7);
int voyantrouge = digitalRead(6);
int voyantvert = digitalRead(7);
if (voyantvert == HIGH)
{
digitalWrite(10, HIGH);
delay(100);
digitalWrite(10, LOW);
}
if (voyantrouge == HIGH)
{
digitalWrite(8, HIGH);
delay(100);
digitalWrite(8, LOW);
}
//Serial.println(ldr);
Serial.println("course haut");
Serial.println(coursehaut);
Serial.println("course bas");
Serial.println(coursebas);
Serial.println("ldr");
Serial.println(ldr);
delay(1000);
//MATIN
if ( ((rtc.h24.Hour10 == 0 & rtc.h24.Hour == 7 ) || ( rtc.h24.Hour10 == 0 & rtc.h24.Hour == 8) || ( rtc.h24.Hour10 == 0 & rtc.h24.Hour == 9 ) || ( rtc.h24.Hour10 == 0 & rtc.h24.Hour == 9)) && ( ldr > 50) && (coursehaut == 0 ))
{
ouverture();
Serial.println("dehors!");
}
if( ((rtc.h24.Hour10 == 0 & rtc.h24.Hour == 7 ) || ( rtc.h24.Hour10 == 0 & rtc.h24.Hour == 8) || ( rtc.h24.Hour10 == 0 & rtc.h24.Hour == 9 ) || ( rtc.h24.Hour10 == 0 & rtc.h24.Hour == 9))&& (coursehaut==1))
{
stop();
}
//SOIR
if ( ((rtc.h24.Hour10 == 1 & rtc.h24.Hour == 9 & rtc.Minutes10 == 4) || ( rtc.h24.Hour10 == 2 & rtc.h24.Hour == 0 & rtc.Minutes10 == 4) || ( rtc.h24.Hour10 == 2 & rtc.h24.Hour == 1 & rtc.Minutes10 == 1 ) || ( rtc.h24.Hour10 == 2 & rtc.h24.Hour == 2 & rtc.Minutes10 == 3)) && ( ldr <=0 ) && (coursebas == 0))
{
delay (20000);
fermeture();
Serial.println("on rentre!");
}
if( ((rtc.h24.Hour10 == 1 & rtc.h24.Hour == 9 ) || ( rtc.h24.Hour10 == 2 & rtc.h24.Hour == 0) || ( rtc.h24.Hour10 == 2 & rtc.h24.Hour == 1 ) || ( rtc.h24.Hour10 == 2 & rtc.h24.Hour == 2)) &&(coursebas == 1))
{
stop();
}
}
void ouverture()
{
digitalWrite(In1, LOW); // moteur tourne d'un sens
digitalWrite(In2, HIGH);
analogWrite(MotEn, 200);
}
void fermeture()
{
digitalWrite(In1, HIGH); // moteur tourne sens inverse
digitalWrite(In2, LOW);
analogWrite(MotEn, 80);
}
void stop()
{
analogWrite(MotEn, 0); // moteur enable plus alimenté
}