Hi guys, I am using an Arduino motor shield in my robot and using 433 mhz rf modules to control it using remote. The problem is that when it is given forward command, the robot keeps running forward and doesn't take any other command, and same problem is with left, right and back command too. Please help...
(Shoot, grip and release commands are working as expected)
Below is the code of the robot.
#include <AFMotor.h>
#include <Servo.h>
#include <RH_ASK.h>
#ifdef RH_HAVE_HARDWARE_SPI
#include <SPI.h>
#endif
// Motor definitions
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
// Servo definitions
Servo leftservo;
Servo rightservo;
// Radio driver
RH_ASK driver(2000, 2);
long lastcommand;
long shooterstart = 0;
// Analog pin for shooter is A0
void forward() {
// Set motor speeds for forward movement
motor1.setSpeed(255);
motor1.run(FORWARD);
motor2.setSpeed(255);
motor2.run(FORWARD);
motor3.setSpeed(255);
motor3.run(FORWARD);
motor4.setSpeed(255);
motor4.run(FORWARD);
}
void back() {
// Set motor speeds for backward movement
motor1.setSpeed(255);
motor1.run(BACKWARD);
motor2.setSpeed(255);
motor2.run(BACKWARD);
motor3.setSpeed(255);
motor3.run(BACKWARD);
motor4.setSpeed(255);
motor4.run(BACKWARD);
}
void left() {
// Set motor speeds for left turn
motor1.setSpeed(255);
motor1.run(BACKWARD);
motor2.setSpeed(255);
motor2.run(BACKWARD);
motor3.setSpeed(255);
motor3.run(FORWARD);
motor4.setSpeed(255);
motor4.run(FORWARD);
}
void right() {
// Set motor speeds for right turn
motor1.setSpeed(255);
motor1.run(FORWARD);
motor2.setSpeed(255);
motor2.run(FORWARD);
motor3.setSpeed(255);
motor3.run(BACKWARD);
motor4.setSpeed(255);
motor4.run(BACKWARD);
}
void stop() {
// Stop all motors
motor1.setSpeed(0);
motor1.run(RELEASE);
motor2.setSpeed(0);
motor2.run(RELEASE);
motor3.setSpeed(0);
motor3.run(RELEASE);
motor4.setSpeed(0);
motor4.run(RELEASE);
}
void setup() {
pinMode(A0, OUTPUT);
digitalWrite(A0, HIGH);
// Attach servos to pins
leftservo.attach(10);
rightservo.attach(9);
// Set initial servo position
leftservo.write(90);
rightservo.write(90);
// Initialize serial communication for debugging
Serial.begin(9600);
Serial.println("Start!");
// Initialize radio communication
if (driver.init()) {
Serial.println("Radio initialized");
}
}
void loop(){
if (driver.available()) {
// Read the incoming message
char incomingMessage[32];
leftservo.write(90);
rightservo.write(90);
uint8_t len = sizeof(incomingMessage);
if (driver.recv((uint8_t *)incomingMessage, &len)) {
incomingMessage[len] = '\0'; // Null-terminate the string
Serial.print("Received: ");
Serial.println(incomingMessage);
// Your existing message handling logic here
} else {
Serial.println("Receive failed");
}
if (strcmp(incomingMessage, "forwardzzzzz") == 0) {
forward();
} else if (strcmp(incomingMessage, "backwardzzzz") == 0) {
back();
} else if (strcmp(incomingMessage, "leftzzzzzzzz") == 0) {
left();
} else if (strcmp(incomingMessage, "rightzzzzzzz") == 0) {
right();
} else if (strcmp(incomingMessage, "shootzzzzzzz") == 0) {
digitalWrite(A0, !digitalRead(A0));
} else if (strcmp(incomingMessage, "gripzzzzzzzz") == 0) {
leftservo.write(0);
rightservo.write(180);
} else if (strcmp(incomingMessage, "releasezzzzz") == 0) {
leftservo.write(180);
rightservo.write(0);
}
}
}