Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define PIN_BP 2 //utilisation de la pin2 pour interruption
- #define PIN_SORTIE_RELAY 3 //pin ou se trouve la sortie pour la commande logique du relais
- #define TMPS_TEMPO_RELAY_OFF 3600000 //1 * 60minutes * 60secondes * 1000 pour milis seconde
- #define TMPS_TEMPO_RELAY_ON 30000 //30seoncdes * 1000 pour miliseconde
- //declaration des variables pour millis
- unsigned long previousMillisRelayOn = 0;
- unsigned long previousMillisRelayOff = 0;
- unsigned long currentMillis = 0;
- volatile uint8_t bpActiver = 0;
- void setup() {
- //configuration des PINS
- pinMode(PIN_BP, INPUT);
- pinMode(PIN_SORTIE_RELAY, OUTPUT);
- //la Pin du relais en etat BAS.
- digitalWrite(PIN_SORTIE_RELAY,LOW);
- //Le bouton doit etre cabler avec une resistance de PULL UP et un condo d'environ 10nF pour eviter les rebonds du bouton
- //on attache une interuption au port 2 int0 si tu prend un autre port, verifie son numero d'interuption. FALLING pour front descendant, RISING Front montant
- // 0 pour le numero d'interruption, BP_Appuer sera correspond a la fonction qui mettra le ralay on ou off n'importe quand.
- attachInterrupt(0, BP_Appuyer, FALLING);
- }
- void loop() {
- //stockage du temps millis actuelle dans la variable currentMillis
- currentMillis = millis();
- //on commence avec le relais eteint pour une periode de TMPS_TEMPO_RELAY_OFF
- if( (currentMillis - previousMillisRelayOff) >=TMPS_TEMPO_RELAY_OFF){
- //le temps d'arret c'est ecouler on lance la tempo de marche
- if( (currentMillis - previousMillisRelayOn) <=TMPS_TEMPO_RELAY_ON){
- digitalWrite(PIN_SORTIE_RELAY, HIGH) ;
- }
- //la Tempo de marche est terminée
- else{
- //backup de SREG pour la configuration d'interruption
- uint8_t oldSREG = SREG;
- //desactivations des interruptions
- cli();
- //copie de la variables de diffèrent contexte
- uint8_t _bpActiver=bpActiver;
- //reactivation de l'etat precedent des interruptions
- SREG = oldSREG ;
- //le bouton poussoir reste prioritaire si il est activé
- if(!_bpActiver){ digitalWrite(PIN_SORTIE_RELAY, LOW) ; }
- //alors on reinitalise previousMillisRelayOff et previousMillisRelayOn pour un nouveau cycle
- previousMillisRelayOff = currentMillis;
- previousMillisRelayOn = currentMillis;
- }
- }
- }
- //fonction qui est activée quand le bouton poussoir est laché(FALLING)
- // fonction qui se trouve dans la ligne de commande attachInterrupt(0, BP_Appuyer, FALLING); dans le setup
- void BP_Appuyer(){
- //on inverse l'etat de bpActiver toggle
- bpActiver = !bpActiver;
- //si bpActiver == 1 ou Vrai alors le relay se met en marche
- if (bpActiver) {
- digitalWrite(PIN_SORTIE_RELAY, HIGH) ;
- }
- //si bpActiver == 0 ou Faux alors le relay s'arrete
- else{
- digitalWrite(PIN_SORTIE_RELAY, LOW) ;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement