#include <LiquidCrystal.h>
#include <Stepper.h>
// Initialisation de l'écran LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Déclaration des broches pour le moteur pas à pas
const int stepsPerRevolution = 200;
const int motorPin1 = 8;
const int motorPin2 = 9;
const int motorPin3 = 10;
const int motorPin4 = 13;
Stepper myStepper(stepsPerRevolution, motorPin1, motorPin2, motorPin3, motorPin4);
// Déclaration de la broche du bouton poussoir
const int buttonPin = 7;
// Variables pour stocker l'état précédent du bouton
int buttonState = 0;
int lastButtonState = 0;
// Variables pour stocker l'état du moteur
bool motorRunning = false;
void setup() {
// Initialise l'écran LCD avec 16 colonnes et 2 lignes
lcd.begin(16, 2);
// Initialise la broche du bouton en entrée
pinMode(buttonPin, INPUT_PULLUP);
// Affiche un message d'accueil sur l'écran LCD
lcd.print("Motor Control");
}
void loop() {
// Lecture de l'état du bouton
buttonState = digitalRead(buttonPin);
// Si le bouton est enfoncé et était auparavant relâché
if (buttonState == LOW && lastButtonState == HIGH) {
// Inverse l'état du moteur
motorRunning = !motorRunning;
// Si le moteur est en marche, affiche un message sur l'écran LCD
if (motorRunning) {
lcd.clear();
lcd.print("Motor Running");
} else {
lcd.clear();
lcd.print("Motor Stopped");
}
}
// Met à jour l'état précédent du bouton
lastButtonState = buttonState;
// Si le moteur est en marche
if (motorRunning) {
// Lecture de la valeur du potentiomètre pour ajuster la vitesse du moteur
int speed = analogRead(A0);
// Convertit la valeur du potentiomètre en une vitesse de rotation
int rpm = map(speed, 0, 1023, 0, 100);
// Définit la vitesse du moteur
myStepper.setSpeed(rpm);
// Fait avancer le moteur d'un pas
myStepper.step(1);
}
}