221 lines
5.2 KiB
C++
221 lines
5.2 KiB
C++
#include "config.h"
|
|
|
|
// 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);
|
|
|
|
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()
|
|
{
|
|
// Exemple de commande :
|
|
for (int i = 0; i < 50; i++)
|
|
{
|
|
forward();
|
|
}
|
|
int rotation_steps = convertRotToSteps(46);
|
|
for (int i = 0; i < rotation_steps; i++)
|
|
{
|
|
left();
|
|
}
|
|
}
|
|
|
|
// 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()
|
|
{
|
|
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(DELAY_TIME);
|
|
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(DELAY_TIME);
|
|
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(DELAY_TIME);
|
|
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(DELAY_TIME);
|
|
}
|
|
|
|
void backward()
|
|
{
|
|
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(DELAY_TIME);
|
|
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(DELAY_TIME);
|
|
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(DELAY_TIME);
|
|
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(DELAY_TIME);
|
|
}
|
|
|
|
void right()
|
|
{
|
|
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(DELAY_TIME);
|
|
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(DELAY_TIME);
|
|
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(DELAY_TIME);
|
|
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(DELAY_TIME);
|
|
}
|
|
|
|
void left()
|
|
{
|
|
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(DELAY_TIME);
|
|
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(DELAY_TIME);
|
|
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(DELAY_TIME);
|
|
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(DELAY_TIME);
|
|
}
|
|
|
|
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);
|
|
}
|