I'm working on a mobile robot that is controled with bts7960B motor driver for 2 whells. I'm using raspberry pi 5 for triggering arduino uno and control. Arduino is controlling the motor drivers. There is a bug about the movement, during the driving when it receives the consol input from my ps4 controller While driving the robot normally with my PS4 controller, for some reason I don't understand, it stays on the last command I sent and the vehicle gets stuck on the last movement it made, for example, I press forward and it continues to go forward even though I don't press it. I cannot return the robot to its previous state without pressing the reset button on the Arduino. Here is my arduino code:
#define L_EN1 2
#define R_EN1 4
#define L_PWM1 5
#define R_PWM1 6
#define L_EN2 8
#define R_EN2 10
#define L_PWM2 11
#define R_PWM2 9
void setup()
{
Serial.begin(115200);
pinMode(L_EN1, OUTPUT);
pinMode(R_EN1, OUTPUT);
pinMode(L_PWM1, OUTPUT);
pinMode(R_PWM1, OUTPUT);
pinMode(L_EN2, OUTPUT);
pinMode(R_EN2, OUTPUT);
pinMode(L_PWM2, OUTPUT);
pinMode(R_PWM2, OUTPUT);
digitalWrite(L_EN1, LOW);
digitalWrite(R_EN1, LOW);
digitalWrite(L_EN2, LOW);
digitalWrite(R_EN2, LOW);
pinMode(LED_BUILTIN, OUTPUT);
}
void motor1Forward(int speed)
{
digitalWrite(L_EN1, HIGH);
digitalWrite(R_EN1, HIGH);
analogWrite(R_PWM1, 0);
analogWrite(L_PWM1, speed);
}
void motor1Reverse(int speed)
{
digitalWrite(L_EN1, HIGH);
digitalWrite(R_EN1, HIGH);
analogWrite(R_PWM1, speed);
analogWrite(L_PWM1, 0);
}
void motor2Forward(int speed)
{
digitalWrite(L_EN2, HIGH);
digitalWrite(R_EN2, HIGH);
analogWrite(R_PWM2, 0);
analogWrite(L_PWM2, speed);
}
void motor2Reverse(int speed)
{
digitalWrite(L_EN2, HIGH);
digitalWrite(R_EN2, HIGH);
analogWrite(R_PWM2, speed);
analogWrite(L_PWM2, 0);
}
void stopMotors()
{
digitalWrite(R_EN1, LOW);
digitalWrite(L_EN1, LOW);
digitalWrite(L_EN2, LOW);
digitalWrite(R_EN2, LOW);
analogWrite(R_PWM1, 0);
analogWrite(L_PWM1, 0);
analogWrite(R_PWM2, 0);
analogWrite(L_PWM2, 0);
}
int led_opened = 0;
void loop() {
if (Serial.available() > 0)
{
char command = Serial.read();
if (command == 'w') {
motor1Forward(255);
motor2Forward(255);
}
else if (command == 's') {
motor1Reverse(255);
motor2Reverse(255);
}
else if (command == 'a') {
motor1Reverse(255);
motor2Forward(255);
}
else if (command == 'd') {
motor1Forward(255);
motor2Reverse(255);
}
else if (command == 'r') {
stopMotors();
}
/*else if (command == 'y') {
stopMotors();
digitalWrite(LED_BUILTIN, HIGH);
}
else if (command == 'n') {
stopMotors();
digitalWrite(LED_BUILTIN, LOW);
}
*/
Serial.flush();
}
}
Thank you in advance for your help!