Advertisement
granteeric

BP interrupt avec delai relais

Mar 23rd, 2021 (edited)
368
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define PIN_BP 2          //utilisation de la pin2 pour interruption
  2. #define PIN_SORTIE_RELAY 3    //pin ou se trouve la sortie pour la commande logique du relais
  3. #define TMPS_TEMPO_RELAY_OFF  3600000   //1 * 60minutes * 60secondes * 1000 pour milis seconde
  4. #define TMPS_TEMPO_RELAY_ON 30000       //30seoncdes * 1000 pour miliseconde
  5.  
  6.  
  7. //declaration des variables pour millis
  8. unsigned long previousMillisRelayOn = 0;
  9. unsigned long previousMillisRelayOff = 0;
  10. unsigned long currentMillis = 0;
  11. volatile uint8_t bpActiver = 0;
  12.  
  13.  
  14.   void setup() {
  15.     //configuration des PINS
  16.     pinMode(PIN_BP, INPUT);
  17.     pinMode(PIN_SORTIE_RELAY, OUTPUT);
  18.  
  19.     //la Pin du relais en etat BAS.
  20.     digitalWrite(PIN_SORTIE_RELAY,LOW);
  21.  
  22.     //Le bouton doit etre cabler avec une resistance de PULL UP et un condo d'environ 10nF pour eviter les rebonds du bouton
  23.     //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
  24.     // 0 pour le numero d'interruption, BP_Appuer sera correspond a la fonction qui mettra le ralay on ou off n'importe quand.
  25.     attachInterrupt(0, BP_Appuyer, FALLING);    
  26.  
  27.   }
  28.  
  29.   void loop() {
  30.     //stockage du temps millis actuelle dans la variable currentMillis
  31.     currentMillis = millis();
  32.  
  33.     //on commence avec le relais eteint pour une periode de TMPS_TEMPO_RELAY_OFF
  34.     if( (currentMillis - previousMillisRelayOff) >=TMPS_TEMPO_RELAY_OFF){
  35.       //le temps d'arret c'est ecouler on lance la tempo de marche
  36.         if( (currentMillis - previousMillisRelayOn) <=TMPS_TEMPO_RELAY_ON){
  37.           digitalWrite(PIN_SORTIE_RELAY, HIGH) ;      
  38.         }
  39.         //la Tempo de marche est terminée
  40.         else{
  41.             //backup de SREG pour la configuration d'interruption
  42.             uint8_t oldSREG = SREG;
  43.             //desactivations des interruptions
  44.             cli();
  45.             //copie de la variables de diffèrent contexte
  46.             uint8_t _bpActiver=bpActiver;
  47.             //reactivation de l'etat precedent des interruptions
  48.             SREG = oldSREG ;
  49.            
  50.           //le bouton poussoir reste prioritaire si il est activé
  51.           if(!_bpActiver){ digitalWrite(PIN_SORTIE_RELAY, LOW) ;      }
  52.          
  53.           //alors on reinitalise previousMillisRelayOff et previousMillisRelayOn pour un nouveau cycle
  54.           previousMillisRelayOff = currentMillis;
  55.           previousMillisRelayOn = currentMillis;
  56.         }
  57.     }
  58.   }
  59.  
  60. //fonction qui est activée quand le bouton poussoir est laché(FALLING)
  61. // fonction qui se trouve dans la ligne de commande attachInterrupt(0, BP_Appuyer, FALLING); dans le setup  
  62.  
  63. void BP_Appuyer(){
  64.   //on inverse l'etat de bpActiver toggle
  65.    bpActiver = !bpActiver;      
  66.  
  67.    //si bpActiver == 1 ou Vrai alors le relay se met en marche
  68.     if (bpActiver) {
  69.       digitalWrite(PIN_SORTIE_RELAY, HIGH) ;
  70.     }
  71.     //si bpActiver == 0 ou Faux alors le relay s'arrete
  72.     else{
  73.       digitalWrite(PIN_SORTIE_RELAY, LOW) ;
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement