Hey there!
I am using arduino nano along with IR receiving head VS1838B.
I am using library IRremote.h
I have functions in my code which runs the bot in various directions.
For a test I have code in which bot goes forward and it works very well.
When I tried merging separately coded working codes, one motor stops working, which works fine again when I remove IR receiver code.
I tried and pinned out the line which causes this thing which is
irrecv.enableIRIn();
When I comment this line the code works totally fine!
Steps I followed:
Wrote code for running bot in various directions which worked perfectly.
Wrote code to get values of buttons when they're pressed using IRremote.h library which worked perfectly.
Merged code but one motor stopped working.
Here's my full code
#include<IRremote.h>
// Motor Driver
#define EN2 3 // Enable pin 2
#define RM1 4 // Front Right Motor
#define RM2 5 // Rear Right Motor
#define EN1 6 // Enable pin 1
#define LM1 7 // Front Left Motor
#define LM2 8 // Rear Left Motor
#define speedEN1 150
#define speedEN2 150
int RECV_PIN = 9;
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long key_value = 0;
void forward()
{
Serial.print("Forwards Triggered");
digitalWrite(RM1,HIGH);
digitalWrite(RM2,LOW);
analogWrite(EN2,speedEN2);
digitalWrite(LM1,HIGH);
digitalWrite(LM2,LOW);
analogWrite(EN1,speedEN1);
}
void right(){
Serial.print("Right Triggered");
digitalWrite(RM1,LOW);
digitalWrite(RM2,LOW);
analogWrite(EN2,0);
digitalWrite(LM1,HIGH);
digitalWrite(LM2,LOW);
analogWrite(EN1,speedEN1);
}
void left(){
Serial.print("Right Triggered");
digitalWrite(RM1,HIGH);
digitalWrite(RM2,LOW);
analogWrite(EN2,speedEN2);
digitalWrite(LM1,LOW);
digitalWrite(LM2,LOW);
analogWrite(EN1,0);
}
void spin_left(){
Serial.print("Right Triggered");
digitalWrite(RM1,HIGH);
digitalWrite(RM2,LOW);
analogWrite(EN2,speedEN2);
digitalWrite(LM1,LOW);
digitalWrite(LM2,HIGH);
analogWrite(EN1,speedEN1);
}
void spin_right(){
Serial.print("Right Triggered");
digitalWrite(RM1,HIGH);
digitalWrite(RM2,LOW);
analogWrite(EN2,speedEN2);
digitalWrite(LM1,LOW);
digitalWrite(LM2,HIGH);
analogWrite(EN1,speedEN1);
}
void backward()
{
Serial.print("Reverse Triggered");
digitalWrite(RM1,LOW);
digitalWrite(RM2,HIGH);
analogWrite(EN2,speedEN2);
digitalWrite(LM1,LOW);
digitalWrite(LM2,HIGH);
analogWrite(EN1,speedEN1);
}
void stop_all()
{
// Serial.print("Right Triggered");
digitalWrite(RM1,LOW);
digitalWrite(RM2,LOW);
digitalWrite(LM1,LOW);
digitalWrite(LM2,LOW);
analogWrite(EN1,0);
analogWrite(EN2,0);
}
void deg360()
{
Serial.print("Right Triggered");
digitalWrite(RM1,HIGH);
digitalWrite(RM2,LOW);
analogWrite(EN2,speedEN2);
digitalWrite(LM1,LOW);
digitalWrite(LM2,HIGH);
analogWrite(EN1,speedEN1);
}
void setup()
{
Serial.begin(9600);
// MOTOR AND ENABLES
pinMode (RM1, OUTPUT);
pinMode (RM2, OUTPUT);
pinMode (LM1, OUTPUT);
pinMode (LM2, OUTPUT);
pinMode (EN1, OUTPUT);
pinMode (EN2, OUTPUT);
Serial.println("Starting IR");
irrecv.enableIRIn(); // when I comment out this line and receiver code forward function works perfectly
Serial.println("Started IR");
}
void loop()
{
if (irrecv.decode(&results)) {
Serial.println(results.value,HEX);
if (results.value == 0XFFFFFFFF)
results.value = key_value;
switch (results.value) {
case 0xFF629D:
forward();
// Serial.println("Working forward");
break;
}
key_value = results.value;
irrecv.resume();
delay(100);
}
}