Le code complet
#include <AccelStepper.h>
#include <LiquidCrystal.h>
// ----- Initialisation des moteurs -----
AccelStepper stepper1(1, 5, 6);
AccelStepper stepper2(1, 8, 9);
LiquidCrystal lcd(22, 23, 24, 25, 26, 27);
// ----- Pins des boutons -----
const int BoutonArret = 29;
const int BoutonReglageTourBobine = 34;
const int BoutonMarcheAvantBobine = 38;
const int BoutonMarcheArriereBobine = 42;
const int BoutonReglageTorsade = 33;
const int BoutonMarcheTorsadeHoraire = 36;
const int BoutonMarcheTorsadeAntiHoraire = 40;
// ----- Potentiomètre -----
const int PotVitesseMot = A6;
// ----- Variables -----
int toursBobine = 100;
int toursTorsade = 1; // de 1 à 20
int vitesseMax = 5000; // vitesse maximale par défaut
// -------------------------------------------------
void setup() {
Serial.begin(9600);
pinMode(BoutonArret, INPUT_PULLUP);
pinMode(BoutonReglageTourBobine, INPUT_PULLUP);
pinMode(BoutonMarcheAvantBobine, INPUT_PULLUP);
pinMode(BoutonMarcheArriereBobine, INPUT_PULLUP);
pinMode(BoutonReglageTorsade, INPUT_PULLUP);
pinMode(BoutonMarcheTorsadeHoraire, INPUT_PULLUP);
pinMode(BoutonMarcheTorsadeAntiHoraire, INPUT_PULLUP);
stepper1.setMaxSpeed(vitesseMax);
stepper2.setMaxSpeed(vitesseMax);
stepper1.setAcceleration(500);
stepper2.setAcceleration(500);
lcd.begin(16, 2);
afficherInformations();
}
// -------------------------------------------------
void afficherInformations() {
lcd.setCursor(0, 0);
lcd.print("Torsade: ");
lcd.print(toursTorsade);
lcd.print(" "); // efface les restes si le chiffre précédent était plus grand
lcd.setCursor(0, 1);
lcd.print("Bobine: ");
lcd.print(toursBobine);
lcd.print(" "); // efface les restes si le chiffre précédent était plus grand
}
// -------------------------------------------------
void loop() {
int potValue = analogRead(PotVitesseMot); // 0 à 1023
vitesseMax = map(potValue, 0, 1023, 50, 5000); // Ajuster min (50) et max (5000)si besoin
stepper1.setMaxSpeed(vitesseMax);
stepper2.setMaxSpeed(vitesseMax);
if (digitalRead(BoutonReglageTourBobine) == LOW) {
toursBobine += 100;
if (toursBobine > 1000) toursBobine = 100;
afficherInformations();
delay(200);
}
if (digitalRead(BoutonReglageTorsade) == LOW) {
toursTorsade++;
if (toursTorsade > 20) toursTorsade = 1;
afficherInformations();
delay(200);
}
if (digitalRead(BoutonMarcheAvantBobine) == LOW) {
lcd.clear();
lcd.print("Bobine Avant");
lcd.setCursor(0, 1);
lcd.print("en cours...");
tournerBobine(true); // true = marche avant
afficherInformations();
}
if (digitalRead(BoutonMarcheArriereBobine) == LOW) {
lcd.clear();
lcd.print("Bobine Arriere");
lcd.setCursor(0, 1);
lcd.print("en cours...");
tournerBobine(false); // false = marche arrière
afficherInformations();
}
if (digitalRead(BoutonMarcheTorsadeHoraire) == LOW) {
lcd.clear();
lcd.print("Torsade H");
lcd.setCursor(0, 1);
lcd.print("en cours...");
tournerTorsade(true); // true = horaire
afficherInformations();
}
if (digitalRead(BoutonMarcheTorsadeAntiHoraire) == LOW) {
lcd.clear();
lcd.print("Torsade AH");
lcd.setCursor(0, 1);
lcd.print("en cours...");
tournerTorsade(false); // false = anti-horaire
afficherInformations();
}
}
// ----- Fonctions de mouvement -----
void tournerBobine(bool avant) {
long steps = (long)toursBobine * 800; // info 200 pas par tour pour un moteur 1.8°
if (!avant) steps = -steps;
stepper1.move(steps);
stepper2.move(-steps); // Sens opposé pour le deuxième moteur
while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) {
stepper1.run();
stepper2.run();
if (digitalRead(BoutonArret) == LOW) { // Modification pour arrêter proprement le système en cas d'appuis sur le bouton stop
stepper1.stop();
stepper2.stop();
stepper1.setCurrentPosition(stepper1.currentPosition());
stepper2.setCurrentPosition(stepper2.currentPosition());
break;
}
}
}
// ----- Fonctions de mouvement -----
void tournerTorsade(bool horaire) {
long steps = toursTorsade * 800; // info 200 pas par tour pour un moteur 1.8°
if (!horaire) steps = -steps;
stepper1.move(steps);
stepper2.move(steps);
while (stepper1.distanceToGo() != 0 || stepper2.distanceToGo() != 0) {
stepper1.run();
stepper2.run();
if (digitalRead(BoutonArret) == LOW) { // Modification pour arrêter proprement le système en cas d'appuis sur le bouton stop
stepper1.stop();
stepper2.stop();
stepper1.setCurrentPosition(stepper1.currentPosition());
stepper2.setCurrentPosition(stepper2.currentPosition());
break;
}
}
}

Mon contenu
Non spécifié
