1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #include <Stepper.h>
// Déclaration des broches des moteurs
const int moteurCPin = 2; // Broches du moteur continu
const int moteur0Pins[] = { 3, 4, 5, 6}; // Broches du moteur PàP n°0 (vertical)
const int moteur1Pins[] = { 7, 8, 11, 12}; // Broches du moteur PàP n°1 (rotation)
// Configuration des fins de course et des boutons poussoirs
const int bpStartPin = A0;
const int bpStopPin = A1;
const int fdcs[2][2] = {{A3, A2}, {A4, A5}}; // fdcs[moteur n°][position 0: repos, 1: travail]
// Créer des objets Stepper pour les moteurs pas à pas
const int pasParTour = 200; // Nombre de pas/tour pour les moteurs pas à pas
Stepper moteur0(pasParTour, moteur0Pins[0], moteur0Pins[1], moteur0Pins[2], moteur0Pins[3]);
Stepper moteur1(pasParTour, moteur1Pins[0], moteur1Pins[1], moteur1Pins[2], moteur1Pins[3]);
// Durée d'activité du moteur C en ms
const unsigned long dT_CC = 180000; // 3 minutes
void Move(uint8_t nMotor, int16_t aStep) { //------------------------------------------------
if(aStep == 0) return; // Mouvement non nul jusqu'à une butée
int16_t fdc; // Choisir la bonne butée
nMotor &= 1; // N° moteur == 0 ou 1 seulement
if(aStep < 0) fdc = fdcs[nMotor][0];
else fdc = fdcs[nMotor][1];
if(nMotor) while(digitalRead(fdc)) moteur1.step(aStep);
else while(digitalRead(fdc)) moteur0.step(aStep);
}
void setup() { //------------------------------------------------
pinMode(bpStartPin, INPUT_PULLUP);
pinMode(bpStopPin, INPUT_PULLUP);
// Initialiser les pins des moteurs pas à pas et des butées
for(int i = 0; i < 4; i++) {
pinMode(moteur0Pins[i], OUTPUT);
pinMode(moteur1Pins[i], OUTPUT);
pinMode(fdcs[i >> 1][i & 1], INPUT_PULLUP);
}
pinMode(moteurCPin, OUTPUT);
motor0.setSpeed(100);
motor1.setSpeed(100);
}
void loop() { //------------------------------------------------
// Attendre l'appui sur le bouton poussoir bp1
if(digitalRead(bpStartPin)) return;
Move(0, -1); // Montée du moteur 0 jusqu'à la butée haute
Move(1, +1); // Rotation du moteur 1 jusqu'à la butée de travail
Move(0, +1); // Descente du moteur 0 jusqu'à la butée de travail (basse)
// Activation du moteur C pendant le temps défini ou interrompu par le bouton stop
unsigned long startTime = millis();
digitalWrite(moteurCPin, HIGH);
while((millis() - startTime < dT_CC) || (digitalRead(bpStopPin) == 0));
digitalWrite(moteurCPin, LOW);
Move(0, -1); // Remontée du moteur 0 jusqu'à la butée haute
Move(1, -1); // Rotation du moteur 1 jusqu'à la butée de repos (-1 si retour)
Move(0, +1); // Redescente du moteur 0 jusqu'à la butée basse (utile ?)
} |