Comme on n'est pas en survitesse, quand on arrête d'envoyer des pas, il s'arrête immédiatement. Avec le jeu, on peut avoir un léger déplacement ce qui est accepté par tous les boutons. Il y a dans le bouton une course entre le moment ou le bouton bascule et la fin du déplacement possible. Pas d'inquiétudes.
Sans faire de fonction supplémentaire:
// Rotation sur une journée 15°/H sur 12h puis retour en arriére
// Include the Stepper library:
#include <Stepper.h>
// Define number of steps per revolution:
const int stepsPerRevolution = 200;
// Give the motor control pins names:
#define pwmA 3
#define pwmB 11
#define dirA 12
#define dirB 13
#define brakeA 9
#define brakeB 8
// Initialize the stepper library on the motor shield:
Stepper myStepper = Stepper(stepsPerRevolution, dirA, dirB);
void setup() {
// Set the PWM and brake pins so that the direction pins can be used to control the motor:
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);
pinMode(brakeA, OUTPUT);
pinMode(brakeB, OUTPUT);
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
// Set the motor speed (RPMs):
myStepper.setSpeed(40);
}
void loop() {
// Début 8h
// Delai en Ms 1s = 1000ms 1m = 6000ms 1h = 3600000ms 12h = 4320000ms
delay(6000);
// Révolution 1
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(400);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(6000);
// Révolution 2
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(400);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(6000);
// Révolution 3
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(400);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(6000);
// Révolution 4
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(400);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(6000);
// Révolution 5
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(400);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(6000);
// Révolution 6
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(400);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(6000);
// Révolution 7
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(400);
delay(6000);
// Révolution 8
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(400);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(6000);
// Révolution 9
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(400);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(6000);
// Révolution 10
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(400);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(6000);
// Révolution 11
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(400);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(6000);
// Révolution 12
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(400);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(12000);
//Retour
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(-4800);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(60000);
}
Maintenant comme on a des ordres semblables et répétitif, on (peut) doit faire soit une boucle pour les premiers mouvement qui sont identiques genre:
void loop() {
// Début 8h
// Delai en Ms 1s = 1000ms 1m = 6000ms 1h = 3600000ms 12h = 4320000ms
delay(6000);
// Révolutions
for (revolution=1; revolution <=12; revolution++) {
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(400);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(6000);
}
delay(6000); // Avec les 6000 précédents cela fait 12000
//Retour
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(-4800);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(60000);
}
soit une fonction et éventuellement une boucle, genre:
void uneRevolution(word step, uint32_t temps) {
digitalWrite(brakeA, LOW); // Remise en puissance du moteur
digitalWrite(brakeB, LOW);
myStepper.step(step);
digitalWrite(brakeA, HIGH); // Coupure du courant dans le moteur
digitalWrite(brakeB, HIGH);
delay(temps);
void loop() {
// Début 8h
// Delai en Ms 1s = 1000ms 1m = 6000ms 1h = 3600000ms 12h = 4320000ms
delay(6000);
// Révolutions
for (revolution=1; revolution <=12; revolution++) uneRevolution(400, 6000);
delay(6000); // Avec les 6000 précédents cela fait 12000
//Retour
uneRevolution(-4800, 60000);
}