Hey,

ich würde gerne meinen Roboter per Bluetooth mit 'W' 'A' 'S' 'D' steuern können.
Das funktioniert auch bereits allerdings nicht so ganz wie ich mir das vorstelle.

Ich drücke 'W' und der Robo rattert los, allerdings sollte er nur so lange fahren, wie auch die Taste 'W' gedrückt ist.

if 'W' - go forward - else stop : funktioniert nicht so ganz weil 'kein Tasten druck' nicht unter else fällt.

if else
Code:
#include <AFMotor.h>

 char value;

 AF_DCMotor motorL(1);
 AF_DCMotor motorR(2);


void setup(){
  Serial1.begin(19200);
  motorR.setSpeed(255);
  motorL.setSpeed(245);
  motorR.run(RELEASE);
  motorL.run(RELEASE);
}


void loop(){
  
if (Serial1.available() >0){
   value = Serial1.read();
}
if (value == 'w'){
   motorR.run(FORWARD);
   motorL.run(FORWARD);
   }

else if (value == 'a'){
   motorR.run(FORWARD);   
   motorL.run(BACKWARD);
   }

else if (value == 's'){
   motorR.run(BACKWARD);   
   motorL.run(BACKWARD);
   }

else if (value == 'd'){
   motorR.run(BACKWARD);   
   motorL.run(FORWARD);
   }

else{
   motorR.run(RELEASE);
   motorL.run(RELEASE);
   }

}
Switch Case
Code:
#include <AFMotor.h>

 char value;

 AF_DCMotor motorL(1);
 AF_DCMotor motorR(2);


void setup(){
  Serial1.begin(19200);
  motorR.setSpeed(255);
  motorL.setSpeed(245);
  motorR.run(RELEASE);
  motorL.run(RELEASE);
}


void loop(){
  
if (Serial1.available()){
  value = Serial1.read();
}

switch(value){
   case 'w':
   motorR.run(FORWARD);
   motorL.run(FORWARD);
   break;

   case 'a':
   motorR.run(FORWARD);
   motorL.run(BACKWARD);
   break;

   case 's':
   motorR.run(BACKWARD);
   motorL.run(BACKWARD);
   break;
   
   case 'd':
   motorR.run(BACKWARD);
   motorL.run(FORWARD);
   break;
   
   default:
   motorR.run(RELEASE);
   motorL.run(RELEASE);
   }
}
Wenn keine Eingabe erfolgt dürfte doch diese if Bedingung false sein oder?
Allerdings kommt er hier nur ins stockern.
Code:
if (Serial1.available() >0){
   value = Serial1.read();
}
else{
   motorR.run(RELEASE);
   motorL.run(RELEASE);
}


Bitte um Rat