Salut a tous, voila j'ai ecrit un petit programme pour guidée un robot avec un 6 led.
- Si une led vois une ligne noir, la tension passe a environ 2v soit une valeur de 320.
- Si une led ne vois rien ( ligne blanche ) environ 4v soir une valeur de 550
les moteurs sont commandés par un PWM de 0 - 255.
// Initialisation de la Variable de comparaison
const int ligne = 410;
// Initialisation des Variables des entrées / sorties
// LEDS
const int ledG2 = 0; // capteur connectée à la broche numérique 12
const int ledG1 = 1; // capteur connectée à la broche numérique 11
const int ledCG = 2; // capteur connectée à la broche numérique 10
const int ledCD = 3; // capteur connectée à la broche numérique 9
const int ledD2 = 5; // capteur connectée à la broche numérique 7
const int ledD1 = 4; // capteur connectée à la broche numérique 6
// MOTEURS
const int MGs = 4; // Commande sens Moteur Gauche
const int MDs = 2; // Commande sens Moteur Droit
const int MG = 5; // Commande vitesse Moteur Gauche - PWM - 0/255
const int MD = 3; // Commande vitesse Moteur Droit - PWM - 0/255
// Initialisation des Variables vitesses moteur
int VMG;
int VMD;
// Initialisation des Variables internes ( Capteurs )
int etatledG3; //variable qui enregistre l'état du capteur
int etatledG2; //variable qui enregistre l'état du capteur
int etatledG1; //variable qui enregistre l'état du capteur
int etatledCG; //variable qui enregistre l'état du capteur
int etatledCD; //variable qui enregistre l'état du capteur
int etatledD3; //variable qui enregistre l'état du capteur
int etatledD2; //variable qui enregistre l'état du capteur
int etatledD1; //variable qui enregistre l'état du capteur
// On créer des variables tension afin de pouvoir afficher la tension de chaque LED
float tensionledG2;
float tensionledG1;
float tensionledCG;
float tensionledCD;
float tensionledD2;
float tensionledD1;
void setup() //fonction d'initialisation de la carte et des variables
{
Serial.begin(9600); // ouvre le port série à 9600 bauds
// Initialisation broche sens moteurs / sortie
pinMode(MGs, OUTPUT); //broche 4 comme étant une sortie
pinMode(MDs, OUTPUT); //broche 2 comme étant une sortie
// Mise a l'etat haut du sens des moteurs - NV
digitalWrite(MGs, HIGH); // Sens moteur gauche Avancer
digitalWrite(MDs, HIGH); // Sens moteur droit Avancer
}
void loop() //fonction principale
{
// Lecture des valeurs des capteurs pour le guidage
etatledG2 = analogRead(ledG2); //Lecture de la valeurs du capteur
etatledG1 = analogRead(ledG1); //Lecture de la valeurs du capteur
etatledCG = analogRead(ledCG); //Lecture de la valeurs du capteur
etatledCD = analogRead(ledCD); //Lecture de la valeurs du capteur
etatledD2 = analogRead(ledD2); //Lecture de la valeurs du capteur
etatledD1 = analogRead(ledD1); //Lecture de la valeurs du capteur
// Stop si pas de ligne
if(etatledG2 > ligne && etatledG1 > ligne && etatledCG > ligne && etatledCD > ligne && etatledD2 > ligne && etatledD1 > ligne)
// Si les capteurs ne voient rien, les moteurs restent a l'arret
{
VMG = 0;
VMD = 0;
}
if(etatledCG < ligne && etatledCD < ligne ) // Si les capteurs centres vois la ligne -> moteur 255
{
VMG = 255;
VMD = 255;
}
// Verification Gauche
if(etatledG1 < ligne && etatledCG < ligne) // Si le capteur vois la ligne sur le G1
{
VMG = 255;
VMD = 200;
}
if(etatledG2 < ligne && etatledG1 < ligne) // Si le capteur vois la ligne sur le G2
{
VMG = 255;
VMD = 125;
}
if(etatledG2 < ligne ) // Si le capteur vois la ligne sur le D3 ET D2 - Permet de faire un niveau de correction supplémentaire
{
VMG = 255;
VMD = 0;
}
// Verification Droite
if(etatledD1 < ligne && etatledCD < ligne) // Si le capteur vois la ligne sur le D1
{
VMG = 200;
VMD = 255;
}
if(etatledD2 < ligne && etatledD1 < ligne) // Si le capteur vois la ligne sur le D2
{
VMG = 125;
VMD = 255;
}
if(etatledD3 < ligne) // Si le capteur vois la ligne sur le D3 et D2 - Permet de faire un niveau de correction supplémentaire
{
VMG = 0;
VMD = 255;
}
//Ecriture des valeurs pour les moteurs
analogWrite(MG,VMG);
analogWrite(MD,VMD);
}
J'ai donc par la suite ajouter des serialprint pour lire toutes mes variables. Tout est correct. Sauf que quelque soit le cas VMG et VMD reste a 0 !!!!
Merci de votre aide.
Ps : Comment fait ont, dans le moniteur serie, pour que les lectures se mettent a la ligne et non a la suite ?