#include <Stepper.h> //Nombre de pas par tour du moteur PAP const int stepsPerRevolution = 200; //Le numéro de la broche du bouton stop const int Boutonstop = 2; //Initialise le moteur PAP sur les broches 8 à 11 du L298N Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); //Vitesse max du moteur PAP int Vitessemoteur = 200; //Temps d'accélération et deceleration du moteur. int TpsAccDec = 30; //Temps de pause du moteur en ms. int Tpsdepause = 5000;
//Variable programme///////////// int Etatvitessemoteur = 1; int Etatmoteur = 0; int Etatpause = 0; int Etatboutonstop = 0; unsigned long currentTime = 0; unsigned long previousTime = 0; unsigned long previousTime2 = 0; /////////////////////////////////
void loop() { //On récupére le nombre de millisecondes écoulées "millis()" depuis que la carte Arduino a commencé à exécuter le programme //et on y stocke dans la variable "currenttime" qui sera utilisée pour TIMER1 "previousTime" et TIMER2 "previousTime2" aprés. currentTime=millis();
//Si détection appuie bouton "digitalRead(Boutonstop) == LOW" //et que l'on n'a pas déjà lancer un cycle d'arrêt "Etatboutonstop == 0" grace au bouton. //on demande arrêt du moteur "Etatmoteur = 0" et //on bloque la détection appuie bouton "Etatboutonstop = 1" tant que le cycle n'est pas fini.
//On attend que le l'opération(TIMER1) currentTime-PreviousTime1 soit > "TpsAccDec" Temps d'Accélération décélération //Une fois le temps accélération décélération atteind "TpsAccDecde" : //on récupére le nombre de millisecondes écoulées depuis que la carte Arduino a commencé à exécuter le programme "currenttime" et au stock dans "previoustime" pour mettre à jour notre TIMER1 //Si on demande la marche du moteur "Etatmoteur = 1" //et que sa vitesse "Etatvitessemoteur" < que la vitesse max "Vitessemoteur" //alors on augmente sa vitesse de +1 "etatvitessemoteur++" //Ou Si on a demandé l'arrêt du moteur "Etatmoteur = 0" //et que sa vitesse "Etatvitessemoteur" > que la vitesse min "1" //alors on diminue sa vitesse de -1 "Etatvitessemoteur-;
//Ce cycle va se répéter à intervalles réguliers qui est = "TpsAccDec" tant que l'opération //if(Etatmoteur == 1 && Etatvitessemoteur Vitessemoteur) ou //if(Etatmoteur == 0 && Etatvitessemoteur > 1) //ne sera pas fini.
//Si une demande arrêt moteur est en cours "Etatmoteur == 0" //et que sa vitesse est à l'arrêt "Etatvitessemoteur == 1" //on met les sorties de L298N au repos pour pas que le moteur PAP et L298N chauffe //On récupére le nombre de millisecondes écoulées depuis que la carte Arduino a commencé à exécuter le programme "currenttime" et a le stock dans "previousTime2" pour mettre à jour notre TIMER2 //On met alors le cycle en pause "Etatpause = 1" //Et on attend que l'opération (TIMER2) currentTime-PreviousTime2 soit > "Tpsdepause" Tant de pause du moteur //Une fois le temps de pause écoulé on stop la pause "Etatpause = 0" //On demande la marche du moteur "Etatmoteur = 1"
//Si on est en demande de marche "Etatmoteur == 1 " //Et que la vitesse du moteur "Etatvitessemoteur" == "Vitessemoteur" vitesse max //Alors ont re autorise l'appui sur le bouton "Etatboutonstop = 0"
//Si la consigne de vitesse du moteur n'est pas nulle "etatvitessemoteur > 1" //On envoie la vitesse du moteur au L298N "my Stepper.Set Speed(Etatvitessemoteur)" //Et on effectue un PAS sur le moteur PAP myStepper.step(1); if(Etatvitessemoteur > 1){ myStepper.setSpeed(Etatvitessemoteur); myStepper.step(1); } }