Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /************************************ déclenchement moteur après action d'un cellule avec temporisation ***************************/
- #define PIN_DETECTEUR 2 // pin 2 a l'interruption extern 0 ou peut prendre aussi la pin 3.
- #define PIN_MOTEUR 4 // pin digital 4 ou autres
- #define PIN_POT_TEMPS A0 // pin ADC
- #define AVEC_POT_TEMPS 1 // 0 si pas de potentiometre - 1 avec
- #define DETECTEUR_PULLUP 1 // 1 PULLUP le level HIGH ou 1 est par defaut, LOW ou 0 indique qu'il y a un contact
- unsigned long tempsEcoule = 0;
- volatile unsigned long tempsAntiRebond = 0;
- volatile unsigned int dureeAntiRebond = 250;
- unsigned int tempsDeclenchement = 5000; //5000 ms soit 5 secondes
- volatile int startDetection = 0; //volatile pour que la variable soit relue dans tous les contextes, 0 pas de détection commencer, 1 detection commencer
- volatile int finBlocage = 0 ;
- volatile int lancementDecomptage = 0 ;
- int moteurActive = 0;
- volatile unsigned long tempsMoteurActive = 0;
- unsigned int dureeMoteurApresFinBlocage = 3000; //temps de fonctionnement du moteur après avoir détecté le déblocage
- void fnDetection();
- void fnFinDetection();
- void initVariable();
- #if AVEC_POT_TEMPS == 1
- void reglageTemporisationDureeBlocage();
- #endif
- void setup() {
- //initialisation des entrées et sorties
- pinMode(PIN_DETECTEUR, INPUT);
- pinMode(PIN_MOTEUR, OUTPUT);
- pinMode(PIN_POT_TEMPS, INPUT);
- attachInterrupt(digitalPinToInterrupt(PIN_DETECTEUR),fnDetection, CHANGE );
- }
- void loop() {
- if(startDetection && !lancementDecomptage){
- #if AVEC_POT_TEMPS == 1
- reglageTemporisationDureeBlocage();
- #endif
- tempsEcoule = millis();
- lancementDecomptage = 1;
- }
- else if( ((millis() - tempsEcoule ) > tempsDeclenchement) && lancementDecomptage && !moteurActive){
- // il est temps de demarrer le moteur
- digitalWrite(PIN_MOTEUR, HIGH);
- moteurActive = 1;
- }
- else if( ((millis() - tempsMoteurActive ) > dureeMoteurApresFinBlocage) && moteurActive && finBlocage){
- //on arrete le moteur
- digitalWrite(PIN_MOTEUR , LOW);
- initVariable();
- }
- else if( ((millis() - tempsEcoule ) > 250) && lancementDecomptage && finBlocage && !moteurActive){
- // le carton c'est débloqué avant le délai de déclenchement moteur
- initVariable();
- }
- }
- void fnDetection(){
- if( !digitalRead(PIN_DETECTEUR) && (millis() - tempsAntiRebond) > dureeAntiRebond ){
- tempsAntiRebond = millis();
- if (!startDetection){
- startDetection = 1; //on passe la variable start detection a 1 quand il y a une detection faite
- }
- }
- else if(startDetection && lancementDecomptage) {
- finBlocage = 1;
- tempsMoteurActive = millis();
- }
- }
- void fnFinDetection(){
- if(startDetection && lancementDecomptage) finBlocage = 1;
- }
- void initVariable(){
- startDetection = 0;
- finBlocage = 0;
- lancementDecomptage = 0;
- moteurActive = 0;
- }
- #if AVEC_POT_TEMPS == 1
- void reglageTemporisationDureeBlocage(){
- int valeurPot = analogRead(PIN_POT_TEMPS);
- if (valeurPot < 300) tempsDeclenchement = 1000;
- else if (valeurPot >= 300 && valeurPot < 400) tempsDeclenchement = 2000;
- else if (valeurPot >= 400 && valeurPot < 500) tempsDeclenchement = 3000;
- else if (valeurPot >= 500 && valeurPot < 600) tempsDeclenchement = 4000;
- else if (valeurPot >= 600 && valeurPot < 700) tempsDeclenchement = 5000;
- else if (valeurPot >= 700 && valeurPot < 800) tempsDeclenchement = 6000;
- else if (valeurPot >= 800 && valeurPot < 900) tempsDeclenchement = 7000;
- else if (valeurPot >= 900 ) tempsDeclenchement = 8000;
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment