Hello everybody,
I recently programmed a little robot with an arduino, a official motor shield, an HC-SE04, two motors, etc…
I managed to make it totally autonomous but then I decided to add a way to control the robot thanks to a remote control. However, in my new code, when the instruction “irrecv.enableIRIn();” is in the code, the two motors do not want to work (But the others things like DEL for example are steel working). If I remove this instruction, the motor restart, but I need it to control the robot with remote control…
Here is my code:
//Radiocommande:
#include <IRremote.h>
int RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
decode_results results;
//Capteur HC-SR04: ( VCC=5v; GND=GND; Echo=7; Trig=6)
#define echoPin 7 // Echo Pin
#define trigPin 6 // Trigger Pin
int maximumRange = 150; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration, distance; // Durée que l'on utilise pour calculer la distance
void setup()
{
//Affichage sur l'ordinateur:
Serial.begin(9600);
//Radiocommande:
irrecv.enableIRIn(); // Active le récepteur IR Stop the motors!!!!!!!
//LED:
pinMode(2,OUTPUT); //Led rouge qui brillera quand distance <= 15 cm
pinMode(4,OUTPUT); //Led verte qui brillera quand ça avance
//Capteur HC-SR04:
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
//Moteur A:
pinMode(9, OUTPUT);
pinMode(12, OUTPUT);
//Moteur B:
pinMode(13, OUTPUT);
pinMode(8, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) { //Si on appui sur un bouton
Serial.println(results.value, HEX); //Affiche la valeur en hexadécimal du bouton pressé
if (results.value==0xFFE21D){ //Si le bouton pressé est celui CH+
//Robot mit en fonctionnement automatique
//LEDS:
digitalWrite(4,HIGH); //LED verte allumée en temps normal
digitalWrite(2,LOW); //LED rouge éteinte en temps normal
//Motor A:
digitalWrite(12, LOW); //Direction (Forward ici)
digitalWrite(9, LOW); //Frein (Disengage ici)
analogWrite(3, 120); //Valeur pour vitesse
//Motor B:
digitalWrite(13, LOW); //Direction (Forward ici)
digitalWrite(8, LOW); //Frein (Disengage ici)
analogWrite(11, 117); //Valeur pour vitesse
//Capteur HC-SR04:
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration/58.2; //Calcul de la distance en cm à l'aide de la vitesse du song
if (distance >= maximumRange || distance <= minimumRange){
Serial.println("-"); //"-" s'affiche à l'écran de l'ordinateur lorsque le capteur HC-SR04 ne détecte pas la distance ou que celle-ci est hors de l'intervalle de tolérance
}
else { //La distance est correctement mesurée par le capteur
Serial.println(distance); //La distance est affiché en cm à l'écran de l'ordinateur
if (distance <=15){
//LEDS:
digitalWrite(2,HIGH); //Allume la LED rouge
digitalWrite(4,LOW); //Eteint la LED verte
//Recul:
digitalWrite(12, HIGH); //Direction A (Backward ici)
digitalWrite(9, LOW); //Frein A (Disengage ici)
analogWrite(3, 100); //Valeur A pour vitesse
digitalWrite(13, HIGH); //Direction B (Backward ici)
digitalWrite(8, LOW); //Frein B (Disengage ici)
analogWrite(11, 100); //Valeur A pour vitesse
digitalWrite(2,HIGH); //Allume la LED rouge
delay(500); //Temps de recule
//Rotation:
(...)
}
else{ //Dans le cas où la distance mesurée est suffisamment grande pour continuer d'avancer
//Ne change pas les instructions intiales données en premier
}
}
delay(70); //Temps avant une nouvelle acquisition de la distance (Une faible valeur permet de meilleur résultats, ie moins d'obstacle pris dans la gueule
}
(...)
}
irrecv.resume(); // Receive the next value
}
}
Thanks for your help!