|
//Définition des ports pour controler les moteurs
|
|
//Moteur gauche :
|
|
#define IN1a 27
|
|
#define IN2a 14
|
|
#define IN3a 12
|
|
#define IN4a 13
|
|
//Moteur droit :
|
|
#define IN1b 5
|
|
#define IN2b 18
|
|
#define IN3b 19
|
|
#define IN4b 21
|
|
|
|
#define BUTTON_PIN 0
|
|
|
|
//Temps d'attente entre deux impulsions :
|
|
int delayTime = 3;
|
|
|
|
//Code éxécuté au démarrage (paramétrage) :
|
|
void setup() {
|
|
//On indique que les ports de controle des moteurs sont des sorties (output)
|
|
pinMode(IN1a, OUTPUT);
|
|
pinMode(IN2a, OUTPUT);
|
|
pinMode(IN3a, OUTPUT);
|
|
pinMode(IN4a, OUTPUT);
|
|
|
|
pinMode(IN1b, OUTPUT);
|
|
pinMode(IN2b, OUTPUT);
|
|
pinMode(IN3b, OUTPUT);
|
|
pinMode(IN4b, OUTPUT);
|
|
|
|
pinMode(BUTTON_PIN, INPUT_PULLUP);
|
|
|
|
Serial.begin(115200); //Démarrage d'une communication Série avec l'ordinateur s'il est connecté
|
|
}
|
|
|
|
//Code éxécuté en boucle jusqu'à l'extinction du robot
|
|
void loop() {
|
|
|
|
int buttonState = digitalRead(BUTTON_PIN);
|
|
|
|
if (buttonState == LOW) {
|
|
delay(1000);
|
|
|
|
// Fonctions disponibles :
|
|
// - forward(<distance en centimètre>);
|
|
// - backward(<distance en centimètre>);
|
|
// - left(<rotation en degré>);
|
|
// - right(<rotation en degré>);
|
|
|
|
// --- DEBUT DU CODE --- //
|
|
|
|
|
|
|
|
// ---- FIN DU CODE ---- //
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//Fonction pour convertir une longueur en cm vers un nombre de pas moteur.
|
|
int convertLengthToSteps(float length) {
|
|
float result = length * 512 / (4 * 3.1415);
|
|
return int(result);
|
|
}
|
|
|
|
//fonction pour convertir une rotation en degrés vers un nombre de pas moteur
|
|
int convertRotToSteps(int rotation) {
|
|
int result = convertLengthToSteps(rotation * 3.1415 / 180 * 7.8);
|
|
return result;
|
|
}
|
|
|
|
|
|
void forward(int length) {
|
|
for (int i = 0; i < convertLengthToSteps(length); i++) {
|
|
digitalWrite(IN4a, HIGH);
|
|
digitalWrite(IN3a, LOW);
|
|
digitalWrite(IN2a, LOW);
|
|
digitalWrite(IN1a, LOW);
|
|
digitalWrite(IN4b, LOW);
|
|
digitalWrite(IN3b, LOW);
|
|
digitalWrite(IN2b, LOW);
|
|
digitalWrite(IN1b, HIGH);
|
|
delay(delayTime);
|
|
digitalWrite(IN4a, LOW);
|
|
digitalWrite(IN3a, HIGH);
|
|
digitalWrite(IN2a, LOW);
|
|
digitalWrite(IN1a, LOW);
|
|
digitalWrite(IN4b, LOW);
|
|
digitalWrite(IN3b, LOW);
|
|
digitalWrite(IN2b, HIGH);
|
|
digitalWrite(IN1b, LOW);
|
|
delay(delayTime);
|
|
digitalWrite(IN4a, LOW);
|
|
digitalWrite(IN3a, LOW);
|
|
digitalWrite(IN2a, HIGH);
|
|
digitalWrite(IN1a, LOW);
|
|
digitalWrite(IN4b, LOW);
|
|
digitalWrite(IN3b, HIGH);
|
|
digitalWrite(IN2b, LOW);
|
|
digitalWrite(IN1b, LOW);
|
|
delay(delayTime);
|
|
digitalWrite(IN4a, LOW);
|
|
digitalWrite(IN3a, LOW);
|
|
digitalWrite(IN2a, LOW);
|
|
digitalWrite(IN1a, HIGH);
|
|
digitalWrite(IN4b, HIGH);
|
|
digitalWrite(IN3b, LOW);
|
|
digitalWrite(IN2b, LOW);
|
|
digitalWrite(IN1b, LOW);
|
|
delay(delayTime);
|
|
}
|
|
}
|
|
|
|
void backward(int length) {
|
|
for (int i = 0; i < convertLengthToSteps(length); i++) {
|
|
digitalWrite(IN4a, LOW);
|
|
digitalWrite(IN3a, LOW);
|
|
digitalWrite(IN2a, LOW);
|
|
digitalWrite(IN1a, HIGH);
|
|
digitalWrite(IN4b, HIGH);
|
|
digitalWrite(IN3b, LOW);
|
|
digitalWrite(IN2b, LOW);
|
|
digitalWrite(IN1b, LOW);
|
|
delay(delayTime);
|
|
digitalWrite(IN4a, LOW);
|
|
digitalWrite(IN3a, LOW);
|
|
digitalWrite(IN2a, HIGH);
|
|
digitalWrite(IN1a, LOW);
|
|
digitalWrite(IN4b, LOW);
|
|
digitalWrite(IN3b, HIGH);
|
|
digitalWrite(IN2b, LOW);
|
|
digitalWrite(IN1b, LOW);
|
|
delay(delayTime);
|
|
digitalWrite(IN4a, LOW);
|
|
digitalWrite(IN3a, HIGH);
|
|
digitalWrite(IN2a, LOW);
|
|
digitalWrite(IN1a, LOW);
|
|
digitalWrite(IN4b, LOW);
|
|
digitalWrite(IN3b, LOW);
|
|
digitalWrite(IN2b, HIGH);
|
|
digitalWrite(IN1b, LOW);
|
|
delay(delayTime);
|
|
digitalWrite(IN4a, HIGH);
|
|
digitalWrite(IN3a, LOW);
|
|
digitalWrite(IN2a, LOW);
|
|
digitalWrite(IN1a, LOW);
|
|
digitalWrite(IN4b, LOW);
|
|
digitalWrite(IN3b, LOW);
|
|
digitalWrite(IN2b, LOW);
|
|
digitalWrite(IN1b, HIGH);
|
|
delay(delayTime);
|
|
}
|
|
}
|
|
|
|
void right(int deg) {
|
|
for (int i = 0; i < convertRotToSteps(deg); i++) {
|
|
digitalWrite(IN4a, HIGH);
|
|
digitalWrite(IN3a, LOW);
|
|
digitalWrite(IN2a, LOW);
|
|
digitalWrite(IN1a, LOW);
|
|
digitalWrite(IN4b, HIGH);
|
|
digitalWrite(IN3b, LOW);
|
|
digitalWrite(IN2b, LOW);
|
|
digitalWrite(IN1b, LOW);
|
|
delay(delayTime);
|
|
digitalWrite(IN4a, LOW);
|
|
digitalWrite(IN3a, HIGH);
|
|
digitalWrite(IN2a, LOW);
|
|
digitalWrite(IN1a, LOW);
|
|
digitalWrite(IN4b, LOW);
|
|
digitalWrite(IN3b, HIGH);
|
|
digitalWrite(IN2b, LOW);
|
|
digitalWrite(IN1b, LOW);
|
|
delay(delayTime);
|
|
digitalWrite(IN4a, LOW);
|
|
digitalWrite(IN3a, LOW);
|
|
digitalWrite(IN2a, HIGH);
|
|
digitalWrite(IN1a, LOW);
|
|
digitalWrite(IN4b, LOW);
|
|
digitalWrite(IN3b, LOW);
|
|
digitalWrite(IN2b, HIGH);
|
|
digitalWrite(IN1b, LOW);
|
|
delay(delayTime);
|
|
digitalWrite(IN4a, LOW);
|
|
digitalWrite(IN3a, LOW);
|
|
digitalWrite(IN2a, LOW);
|
|
digitalWrite(IN1a, HIGH);
|
|
digitalWrite(IN4b, LOW);
|
|
digitalWrite(IN3b, LOW);
|
|
digitalWrite(IN2b, LOW);
|
|
digitalWrite(IN1b, HIGH);
|
|
delay(delayTime);
|
|
}
|
|
}
|
|
|
|
void left(int deg) {
|
|
for (int i = 0; i < convertRotToSteps(deg); i++) {
|
|
digitalWrite(IN4a, LOW);
|
|
digitalWrite(IN3a, LOW);
|
|
digitalWrite(IN2a, LOW);
|
|
digitalWrite(IN1a, HIGH);
|
|
digitalWrite(IN4b, LOW);
|
|
digitalWrite(IN3b, LOW);
|
|
digitalWrite(IN2b, LOW);
|
|
digitalWrite(IN1b, HIGH);
|
|
delay(delayTime);
|
|
digitalWrite(IN4a, LOW);
|
|
digitalWrite(IN3a, LOW);
|
|
digitalWrite(IN2a, HIGH);
|
|
digitalWrite(IN1a, LOW);
|
|
digitalWrite(IN4b, LOW);
|
|
digitalWrite(IN3b, LOW);
|
|
digitalWrite(IN2b, HIGH);
|
|
digitalWrite(IN1b, LOW);
|
|
delay(delayTime);
|
|
digitalWrite(IN4a, LOW);
|
|
digitalWrite(IN3a, HIGH);
|
|
digitalWrite(IN2a, LOW);
|
|
digitalWrite(IN1a, LOW);
|
|
digitalWrite(IN4b, LOW);
|
|
digitalWrite(IN3b, HIGH);
|
|
digitalWrite(IN2b, LOW);
|
|
digitalWrite(IN1b, LOW);
|
|
delay(delayTime);
|
|
digitalWrite(IN4a, HIGH);
|
|
digitalWrite(IN3a, LOW);
|
|
digitalWrite(IN2a, LOW);
|
|
digitalWrite(IN1a, LOW);
|
|
digitalWrite(IN4b, HIGH);
|
|
digitalWrite(IN3b, LOW);
|
|
digitalWrite(IN2b, LOW);
|
|
digitalWrite(IN1b, LOW);
|
|
delay(delayTime);
|
|
}
|
|
}
|
|
|
|
|
|
void stopMotors(void) {
|
|
digitalWrite(IN4a, LOW);
|
|
digitalWrite(IN3a, LOW);
|
|
digitalWrite(IN2a, LOW);
|
|
digitalWrite(IN1a, LOW);
|
|
|
|
digitalWrite(IN4b, LOW);
|
|
digitalWrite(IN3b, LOW);
|
|
digitalWrite(IN2b, LOW);
|
|
digitalWrite(IN1b, LOW);
|
|
}
|