//Define stepper motor connections ans steps per revoltion:
#define dirPin1 2 // Pin DIR sur broche numerique D2
#define stepPin1 3 // Pin STEP sur broche numerique D3
int potpin1 = 0; // Pin analogique A0 pour connecter le potentiometre
int led1pin = 7;
int led2pin = 6;
int val_pot1; // Variable pour lire la valeur du potentiometre
int val_stepper1; // Variable nombre de pas a envoyer au moteur
int val_delai1 = 1000; // Variable vitesse a envoyer au moteur
int val_delai2 = 1000;
void setup() {
//Declare pins as output
pinMode(potpin1, INPUT); // On déclare A0 (potentiometre) en entree
pinMode(stepPin1, OUTPUT); // On déclare D2 (DIR) en sortie
pinMode(dirPin1, OUTPUT); // On déclare D3 (STEP) en sortie
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
led1pin = 7;
led2pin = 6;
Serial.begin(9600); // ouvre le port serie et fixe le debit de communication
// à 9600 bauds pour echanger avec le moniteur serie
}
void loop () {
/// MOTEUR N°1
val_pot1 = analogRead(potpin1); // On vient lire la valeur du potentiometre
// (entre 0 et 1023) et la stocker dans "val_pot1"
// Convertit la plage de 0 a 1023 a une plage de 0 a 180
val_stepper1 = map(val_pot1, 0, 1023, 0, 180);
// Si le potentiometre se trouve entre 0 et 79 degres
if (val_stepper1 >= 0 && val_stepper1 < 80)
{
// On tourne dans le sens antihoraire
digitalWrite(dirPin1, HIGH);
digitalWrite(led2pin, HIGH);
// On fait avancer d'un pas le moteur
digitalWrite(stepPin1, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin1, LOW);
delayMicroseconds(1000);
// On calcule un delai suivant la position du potentiometre
// Convertit la plage de 0 a 79 a une plage de 1 a 500
// Quand on est proche de 79, le delai est plus important (500 ms)
// Quand on est proche de 0, le delai est moins important (1 ms)
val_delai1 = map(val_stepper1, 0, 79, 1, 500);
// On patiente de la duree du délai calculee
delay(val_delai1);
}
// Si le potentiometre se trouve entre 101 et 180 degres
else if (val_stepper1 > 100 && val_stepper1 <= 180)
{
// On tourne dans le sens horaire
digitalWrite(dirPin1, LOW);
digitalWrite(led2pin, HIGH);
// On fait avancer d'un pas le moteur
digitalWrite(stepPin1, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin1, LOW);
delayMicroseconds(1000);
// On calcule un delai suivant la position du potentiometre
// Convertit la plage de 101 a 180 a une plage de 1 a 500
// Quand on est proche de 101, le delai est plus important (500 ms)
// Quand on est proche de 180, le delai est moins important (1 ms)
val_delai2 = map(val_stepper1, 101, 180, 500, 1);
// On patiente de la duree du délai calculee
delay(val_delai2);
}
// Si le potentiometre se trouve entre 80 et 100 degres
else if (val_stepper1 >= 80 && val_stepper1 <= 100)
{
// On ne fait pas tourner le moteur
delay(1000);
Serial.println("Arrêt moteur N°1");
digitalWrite(led1pin, HIGH);
}
// Sortie texte vers moniteur série
Serial.print("val_pot1 = ");
Serial.println(val_pot1);
Serial.print("val_stepper1 = ");
Serial.println(val_stepper1);
Serial.print(" ");
Serial.println(val_delai1);
}