Bonjour,
Je suis actuellement en train de coder un programme pour contrôler mon moteur à partir d'un suiveur de ligne et d'une télécommande pour mon TIPE. Le principe est assez simple: lorsque le suiveur de ligne détecte une ligne blanche, le moteur démarre dans une direction. La télécommande quant à elle permet de changer la vitesse du moteur. Or, mon code ne marche pas et cela me paraît assez étonnant puisqu'il me semble correct et logique. J'ai également vérifié les branchements et ils sont bons. Est-ce que vous pourriez m'aider s'il-vous-plaît? Je vous joint mon code:
/*----------------------------------DECLARATION DES MODULES-------------------------------------------------------------------------------*/
#include "IRremote.h"
#include "SR04.h"
/*-----------------------------------DECLARATION DES SORTIES-------------------------------------------------------------------------------*/
#define ENABLE 5 //
#define DIRA 3 //M+
#define DIRB 4 //M-
#define TRIG_PIN 12
#define ECHO_PIN 13
/*--------------------------------------DECLARATION DES ENTREES-------------------------------------------------------------------------------*/
int CapteurIR = 11;
int LED = 13;
int SuiveurDeLigne = 10;
SR04 sr04 = SR04(ECHO_PIN, TRIG_PIN);
/*---------------------------------------DECLARATION DES VARIABLES-------------------------------------------------------------------------------*/
IRrecv irrecv(CapteurIR); // create instance of 'irrecv'
decode_results results; // create instance of 'decode_results'
int val;
int vitesse;
int time;
int v;
/*---------------------------------------DEFINITION DES FONCTIONS-------------------------------------------------------------------------------*/
void Sens_A() {
digitalWrite(ENABLE, v);
digitalWrite(DIRB, LOW);
digitalWrite(DIRA, HIGH);
delay(2000);
}
void Sens_B() {
digitalWrite(ENABLE, v);
digitalWrite(DIRA, LOW);
digitalWrite(DIRB, HIGH);
delay(2000);
}
void Stop() {
digitalWrite(DIRA, LOW);
digitalWrite(DIRB,LOW);
}
int Detection_Ligne() {
val = digitalRead(SuiveurDeLigne);
if (val == HIGH) {
return 1;
} else
return 0;
}
int Reception_IR() {
int value = 0; // Valeur par défaut
if (irrecv.decode(&results)) { // Si des données infrarouges sont reçues
switch (results.value) {
case 0xFFA25D: value = 0; break; // Touche POWER
case 0xFFE21D: value = 1; break; // Touche MODE
case 0xFF629D: value = 2; break; // Touche MUTE
case 0xFF22DD: value = 3; break; // Touche PLAY/PAUSE
case 0xFF02FD: value = 4; break; // Touche REWIND
case 0xFFC23D: value = 5; break; // Touche FORWARD
case 0xFFE01F: value = 6; break; // Touche EQ
case 0xFFA857: value = 7; break; // Touche VOL-
case 0xFF906F: value = 8; break; // Touche VOL+
case 0xFF9867: value = 9; break; // Touche 0
case 0xFFB04F: value = 10; break; // Touche RPT
case 0xFF6897: value = 11; break; // Touche 1
case 0xFF30CF: value = 12; break; // Touche 2
case 0xFF18E7: value = 13; break; // Touche 3
case 0xFF7A85: value = 14; break; // Touche 4
case 0xFF10EF: value = 15; break; // Touche 5
case 0xFF38C7: value = 16; break; // Touche 6
case 0xFF5AA5: value = 17; break; // Touche 7
case 0xFF42BD: value = 18; break; // Touche 8
case 0xFF4AB5: value = 19; break; // Touche 9
case 0xFFFFFFFF: Serial.println(" REPEAT"); break; // Touche maintenue
default: Serial.println(" other button"); break; // Autre touche
}
irrecv.resume(); // Reprise de la réception infrarouge
}
return value; // Retourne la valeur correspondant à la touche appuyée
}
void Reception_US() {
digitalWrite(TRIG_PIN, LOW);
delay(5);
digitalWrite(TRIG_PIN, HIGH);
delay(10);
digitalWrite(TRIG_PIN, LOW);
time = pulseIn(ECHO_PIN, HIGH);
}
int Controle_Vitesse() {
int i=Reception_IR();
switch (i) {
case 9: vitesse = 0; break;
case 11: vitesse = 25; break;
case 12: vitesse = 50; break;
case 13: vitesse = 70; break;
case 14: vitesse = 100; break;
case 15: vitesse = 130; break;
case 16: vitesse = 160; break;
case 17: vitesse = 190; break;
case 18: vitesse = 210; break;
case 19: vitesse = 255; break;
default: vitesse=255;
}
return vitesse;
}
/*------------------------------------------INITIALISATION-----------------------------------------------------------------------*/
void setup() {
//---set pin direction
pinMode(ENABLE, OUTPUT);
pinMode(DIRA, OUTPUT);
pinMode(DIRB, OUTPUT);
pinMode(LED, OUTPUT);
pinMode(SuiveurDeLigne, INPUT);
Serial.begin(9600);
}
/*------------------------------------PROGRAMME PRINCIPAL-------------------------------------------------------------*/
void loop() {
v = Controle_Vitesse();
if (Detection_Ligne () == 1 ){
Sens_A();
}
//Si on capte un changement de rotation, on arrête le moteur
//delay(10000);
//Stop();
}
(J'ai également à programmer un capteur ultrasonique comme capteur de rotation mais je le ferai plus tard)
Merci beaucoup de votre aide
