Our robot (driven by Arduino UNO) is controlled by a remote control. The remote control is programmed correctly and the robot follows its commands. However, since the robot is dragging a heavy load, it can't always execute the command (such as turning). When the robot doesn't execute the command, the remote control stops controlling the robot's movements and the programmed STOP button on the remote stops working.
Edit: Some more context:
We are using an Arduino UNO connected to a dbh01c motor driver that is itself connected to 2*[12V, 7Ah] batteries to drive two 24V DC motors.
This is the code used:
#include <IRremote.h>
int RECV_PIN = 13;
IRrecv irrecv(RECV_PIN);
decode_results results;
//chassis motor
int IN1_A = 8;
int IN2_A = 7;
int EN_A= 6;
int IN1_B = 2;
int IN2_B = 12;
int EN_B= 5;
//blade motor
int in1 = 10;
int in2 = 11;
int enA = 9;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(enA, OUTPUT);
pinMode (EN_A, OUTPUT);
pinMode (IN1_A, OUTPUT);
pinMode (IN2_A, OUTPUT);
pinMode (EN_B, OUTPUT);
pinMode (IN1_B, OUTPUT);
pinMode (IN2_B, OUTPUT);
}
void loop()
{
if (irrecv.decode(&results))
{
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
if (results.value==0x1E108)
{
Forward();
}
if (results.value==0x9E108)
{
Backward();
}
if (results.value==0xDE108 )
{
Right();
}
if (results.value==0x5E108 )
{
Left();
}
if (results.value==0x540A)
{
Stop();
}
if (results.value==0x240A) {
BladeStart();
}
if (results.value==0x640A) {
BladeStop();
}
if (results.value==0xA90) {
BladeStop();
}
}
void Forward()
{
digitalWrite (IN1_A, LOW);
digitalWrite (IN1_B, LOW);
digitalWrite (IN2_A, HIGH);
digitalWrite (IN2_B, HIGH);
analogWrite(EN_A, 200);
analogWrite(EN_B, 200);
}
void Backward()
{
digitalWrite (IN1_A, HIGH);
digitalWrite (IN1_B, HIGH);
digitalWrite (IN2_A, LOW);
digitalWrite (IN2_B, LOW);
analogWrite(EN_A,150);
analogWrite(EN_B,150);
}
void Left()
{
digitalWrite (IN1_A, LOW);
digitalWrite (IN1_B, HIGH);
digitalWrite (IN2_A, HIGH);
digitalWrite (IN2_B, LOW);
analogWrite(EN_A, 150);
analogWrite(EN_B, 180);
delay(800);
analogWrite(EN_A, 0);
analogWrite(EN_B, 0);
}
void Right()
{
digitalWrite (IN1_A, HIGH);
digitalWrite (IN1_B, LOW);
digitalWrite (IN2_A, LOW);
digitalWrite (IN2_B, HIGH);
analogWrite(EN_A, 150);
analogWrite(EN_B, 180);
delay(1000);
analogWrite(EN_A, 0);
analogWrite(EN_B, 0);
}
void Stop()
{
analogWrite(EN_A,0);
analogWrite(EN_B,0);
analogWrite(enA, 0);
}
void BladeStart()
{
analogWrite(enA, 70);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
}
void BladeStop()
{
analogWrite(enA, 0);
}
void SlowStop()
{
for (int i=200; i>=0;i--)
{
analogWrite(EN_A,i);
analogWrite(EN_B,i);
delay(20);
}
}