I have built a simple robot that goes forward, reverse, left, right and stop, controlled by an old DVD remote. Everything works fine if I leave my analogWrite pin speed at either 0 or 255. Once I change the speed in analogWrite, the IR codes received from the remote seem to change. Example - Forward code is 510 as listed in the Serial Monitor. If I change the speed to a value between 0 and 255, the serial monitor shows 510 for the first button push, but then all of the codes change to something else. Forward changes to 33689 for example, reverse changes to 48356, etc. so the robot no longer moves.
Here is my code. I have tried changing the recv_pin, but that didn't help.
Any Ideas?
#include <IRremote.h>
int RECV_PIN = 5; // connect IR receiver
#define forward 510 // Forward Button Code
#define reverse 33150 // Reverse Button Code
#define stopcar 33915 // Stop Button Code
#define left 35445 // left Button Code
#define right 45645 // right Button Code
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600); // send codes to serial monitor
irrecv.enableIRIn(); // Start the receiver
//Setup Motor A
-
pinMode(12, OUTPUT); //Motor direction A pin*
-
pinMode(9, OUTPUT); //Brake Channel A pin*
-
//Setup Motor B*
-
pinMode(13, OUTPUT); //Motor direction B pin*
-
pinMode(8, OUTPUT); //Brake B pin*
-
digitalWrite(9,HIGH); //Turns brakes on Motor A*
-
digitalWrite(8,HIGH); //Turns brakes on Motor B*
}
void loop() {
if (irrecv.decode(&results)) {
- unsigned int value = results.value;*
- switch(value)*
{ - case forward:*
- digitalWrite(9,LOW); //Brake Motor A - off*
- digitalWrite(12, HIGH); //Motor A Forward*
- analogWrite(3, 255); //Adjust speed of motor A*
- digitalWrite(8,LOW); //Brake Motor B - off*
- digitalWrite(13, HIGH); //Motor B Forward*
- analogWrite(11, 255); //adjust speed of motor B*
- break;*
- case reverse:*
- digitalWrite(9,LOW); //Brake Motor A*
- digitalWrite(12, LOW); //Motor A Forward*
- analogWrite(3, 255); //Adjust speed of motor A*
- digitalWrite(8,LOW); //Brake Motor B - off*
- digitalWrite(13, LOW); //Motor B Forward*
- analogWrite(11, 255); //adjust speed of motor B*
- break;*
- case stopcar:*
- digitalWrite(9,HIGH); //Brake Motor A*
- digitalWrite(12, HIGH); //Motor A Forward*
- analogWrite(3, 0); //Adjust speed of motor A*
- digitalWrite(8,HIGH); //Brake Motor B*
- digitalWrite(13, HIGH); //Motor B Forward *
- analogWrite(11, 0); //adjust speed of motor B*
- break; *
- case left:*
- digitalWrite(9,LOW); //Brake Motor A*
- digitalWrite(12, HIGH); //Motor A Forward*
- analogWrite(3, 0); //Adjust speed of motor A*
- digitalWrite(8,LOW); //Brake Motor B*
- digitalWrite(13, HIGH); //Motor B Forward *
- analogWrite(11, 255); //adjust speed of motor B*
- break; *
- case right:*
- digitalWrite(9,LOW); //Brake Motor A*
- digitalWrite(12, HIGH); //Motor A Forward*
- analogWrite(3, 255); //Adjust speed of motor A*
- digitalWrite(8,LOW); //Brake Motor B*
- digitalWrite(13, HIGH); //Motor B Forward *
- analogWrite(11, 0); //adjust speed of motor B*
- break; *
- }*
- Serial.println(value); // prints codes to serial monitor*
- irrecv.resume(); // Receive the next value*
}
}