Problema coche rc (no gira y acelera al mismo tiempo)

Estoy haciendo un coche rc con un servo y un motor brushless.estuve haciendo el codigo lo subi ala placa arduino mega,pero tengo un problema al intentar acelerar y girar al mismo tiempo se bloquea y no hace ni una cosa ni la otra.Estoy usando un modulo bluetooth hc-05

Aqui esta el codigo que use:

#include <SoftwareSerial.h>



#include <Servo.h>

int incomingByte = 0;  // for incoming serial data
int armingTime;
int pin = 9;
int counter = 0;
int pulseTime = 1100; //microseconds
boolean highSpeed = true;
Servo myservo2;

char junk;
String inputString="";

Servo myservo;

void setup() {
Serial.begin(9600);

 myservo2.attach(9);
myservo.attach(10);


}

void loop() {

int ServoAngle = 50; //Middenstand
int motor = 1500;
if(Serial.available()){
while(Serial.available()){

  
   Serial.println(inputString);
   while (Serial.available())

   {
     char inChar = (char)Serial.read(); //read the input
     inputString += inChar;        //make a string of the characters coming on serial
   }
    
 { junk = Serial.read() ;}      
   if(inputString == "L"){         
     ServoAngle = 100;}
     //delay(0); }    
   if(inputString == "R"){   
     ServoAngle =0;}
     //delay(0);}
   if(inputString == "F"){   
     motor = 2200;}
     //delay(0);}
   if(inputString == "B"){   
     motor = 1400;}
     //delay(0);}
   
   {
    
     myservo.write(90);
   }
   inputString = "";
 }
 myservo.write(ServoAngle);
 myservo2.write(motor);
}
}

si alguien me pudiera ayudar se lo agradeceria mucho…

Hola, @sergisaty, por favor te invito a leer las Normas del foro.
Acabo de editar tu código espero que la próxima sepas hacerlo.

Se bloquea porque estoy seguro que conectaste el BT a los pines 0 y 1 ya que se ve como incluyes SoftwareSerial pero luego no haces nada creando el objeto para que el dispositivo BT interactúe con el puerto virtual.
En cambio se ve solo esto

 Serial.println(inputString);
   while (Serial.available())

   {
     char inChar = (char)Serial.read(); //read the input

Asi que seguramente recibe algun comando y luego se bloquea.

entonces que tengo que hacer??

la direccion y el motor funcionan pero por separado.Cuando intento girar mientras estoy acelerando el coche rc se frena.

pd: He estado leyendo y creo que arduino no es capaz de hacer 2 cosas a la vez,es ese el problema?

Ningún micro salvo los multitarea pueden hacer 2 cosas a la vez.
Menos podrás hacer cosas aparentemente simulaneas si usas delay().
Si no estudias y comprendes Arduino te dejarás llevar por todo lo que lees como si fuera cierto. A veces lo es y otras no.
Tu código en gral no esta mal pero ya te dije. Tienes conectados los pines del HC-05 a 0 y 1 y como no respondes debe asumir que es así.
Debes usar SoftwareSerial en algunos pines como 2 y 3 por sugerir algunos y cambiar parte del código.

Debes aprender también que las preguntas que haces ya fueron respondidas casi siempre. Asi que una simple busqueda Arriba derecha (LUPA) de las palabras importantes te puede arrojar soluciones.
Una simple búsqueda arroja muchos resultados como estos

Duda Librería SoftwareSerial

Arduino Software Serial Interface

Biblioteca SoftwareSerial

Como dice el último link

#include <SoftwareSerial.h>

 const byte rxPin = 2;
 const byte txPin = 3;

 // configura un nuevo objeto serie
 SoftwareSerial mySerial (rxPin, txPin);

Ahi tendras definidos los pines RX y TX para conectar al BT.

Y luego debes cambiar en tu código esto, sigue habiendo muchas cosas de mas pero las dejo para que tu le encuentres el uso.

#include <Servo.h>
#include <SoftwareSerial.h>

const byte rxPin    = 2;
const byte txPin    = 3;
const byte pin      = 9;

int incomingByte    = 0;  // for incoming serial data
int counter         = 0;
int pulseTime       = 1100; //microseconds
int armingTime;
boolean highSpeed   = true;
Servo myservo2;
char junk;
String inputString  = "";
Servo myservo;

void setup() {
    Serial.begin(9600);
    mySerial.begin(9600);
    
    myservo.attach(10);
    myservo2.attach(9);
}

void loop() {

    int ServoAngle = 50; //Middenstand
    int motor = 1500;
    
    if (mySerial.available()){
        char inChar = mySerial.read(); //read the input
        inputString += inChar;        //make a string of the characters coming on serial
        switch (inChar) {
            case 'L': ServoAngle = 100;
                    break;
            case 'R': ServoAngle = 0;
                    break;
            case 'F': motor = 2200;
                    break;
            case 'B': motor = 1400;
                    break;
        }
        inputString = "";
        myservo.write(90);
        myservo.write(ServoAngle);
        myservo2.write(motor);
    }
}

El protocolo que usas no sirve para mucho. Ni puedes ir a la derecha. Ni proporcional. Todo o nada. Esto hicimos en radio control hace 50 años.

entonces que solucion propones?

Probaste el código que posteé?

sii,pero no hace nada,conecto el bluetooth con mi movil y no hace nada

Y conectaste el BT a los pines que te dije?
DIme como los conectaste?

Conecte el modulo bt HC-05 a los pìnes 2 y 3 es decir rx arduino con tx bt y al contrario tx arduino con rx bt

Y GND supongo que también, no?

Agrega esto para ver si se reciben los comandos

if (mySerial.available()){
        char inChar = mySerial.read(); //read the input
        Serial.println(inChar);

He puesto el codigo he conectado el bluetooth al movil he abierto la consola y no veo nada alli

Bueno entonces no esta recibiendo nada de tu BT y tu aplicación.

Prueba con este

#include <SoftwareSerial.h>
SoftwareSerial BT1(2, 3); // RX | TX
void setup()
  { pinMode(8, OUTPUT);        // Al poner en HIGH forzaremos el modo AT
    pinMode(9, OUTPUT);        // cuando se alimente de aqui
    digitalWrite(9, HIGH);
    delay (500) ;              // Espera antes de encender el modulo
    Serial.begin(9600);
    Serial.println("Levantando el modulo HC-06");
    digitalWrite (8, HIGH);    //Enciende el modulo
    Serial.println("Esperando comandos AT:");
    BT1.begin(9600); 
  }
 
void loop()
  {  if (BT1.available())
           Serial.write(BT1.read());
     if (Serial.available())
        BT1.write(Serial.read());
  }

No se a que velocidad tienes seteado el BT. Eso lo sabrás tu, como en tu primer código decía 9600 y entiendo que algo funcionaba fue por eso que puse 9600.
Prueba a ver este código a ver si recibe y envia complandos AT.

sergisaty:
entonces que solucion propones?

me parece que te falten muchos conocimientos básicos.
Infórmate como diseñar un mando a distancia con 2 canales proporcionales.
Has de inventar un protocolo de transmisión de comandos/valores para mandar los datos de tu emisora al receptor. Luego has de interpretar los datos y mandar el servo de la dirección y el ESC del motor.

he probado el codigo y tampoco pasa nada .

he probado a cambiar el baud rate del hc-05 a 38400 pero tampoco.

gracias por tu ayuda surbyte te agradezco mucho que me estes ayudadando.

Si no pasa nada con mi código entonces tampoco pasaba algo con el tuyo.
No es posible que pasaras de que funcionar a no funcionar.

no,el codigo no me da ningun error, el problema creo que esta en el hardware.

Bueno pq no comienzas por el principio. Olvida el BT y conecta tu servo como lo tienes y debería reaccionar a los comandos dados por el Monitor Serie. Si no lo hace. Olvida este código y ve al comienzo.

Ejemplo simple con servo y prueba un servo. Lo haces funcionar, entonces agrega el segundo. Cuando ambos trabajen prueba con lo que encuentres que este mal en tu código original SIEMPRE SIN BT.

si que los reconoce, creo que el bluetooth o el serial no son capaces de leer 2 comandos a la vez por ejemplo:

si yo envio L funciona bien

pero si envio LF que es girar y acelerar no hace nada creo que el problema es esto porque todo lo demas funciona bien

Pero el problema lo tienes tu y no el código.
Cuando tu le envias LF, el programa hace L y luego F no hace LF porque no le diste una programación para que entienda LF!!

Se comprende? Esta haciendo comandos individuales, no mezcla de ellos.

En tu código original tu concatenas los datos con inputString pero luego procesas de a 1, es decir si tu envias LF ninguna de las condiciones se cumple porque no hay acción para "LF".

Agrega esto a tus secuencias de comando

if (inputString == "LF"){        
     ServoAngle = 100;
     motor = 2200;
}

y esta modificación va en el código que posteaste al comienzo. No el que yo te hice. Luego modifico el mío si te interesa.