Coche wifi +APK

Hola Comunidad,

Estoy trabajando en un pequeño proyecto que con un poco de suerte podría acabar como proyecto de fin de grado....

He montado un coche con un servo,arduino uno, modulo wifi esp8622 y un controlador de motor L298N.

Como mando empleo una apk que permite comunicarme con mi arduino (k a su vez esta conectado con un modulo esp8622)

Mi problema es, que no logro una comunicación coherente, es decir, si mando 4,5,6 el arduino igual recibe ,4,&%/(%/, o cosas raras(de vez en cuando lo pilla bien, pero vasta un solo caracter fuera de tono para volver loco al servo, o a los motores).

un saludo, y espero una solución que llevo días para arreglar esta... XDDD

http://subefotos.com/ver/?fe63c676738f9a6c2c08d5744997309do.png

codigo arduino:

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

#define M_ATRAS 4
#define M_ADELANTE 5
#define M_VELOCIDAD 6


Servo servo;  // Crea un Objeto servo  
SoftwareSerial ESP8266(3,2); //1)RX-> Azul, 2)TX->Amarillo

String mar;
int vel;
int rot;

void setup()
{
  Serial.begin(115200);
  ESP8266.begin(115200);
  Serial.println("Iniciando...");


 comandoESP("AT+RST"); // reset module
 comandoESP("AT+CWMODE=3"); // configure as access point
 //comandoESP("AT+CWSAP=\"ESP\",\"1234567890\",3,3"); //SSID,PASSWORD,CHANNEL,PASSWORD-ENCRYPATION(0=NO PASSWORD)                                               //0 is encryption type like 0 = Open, 2 =WPA_PSK, 3 = WPA2_PSK, 4 = WPA_WPA2_PSK
 comandoESP("AT+CWJAP=\"UNJAMON\",\"VASERKNOXD\"");
 comandoESP("AT+CIPMUX=1"); // configure for multiple connections
 comandoESP("AT+CIPSERVER=1,400"); // turn on server on port x

Serial.println("Servidor TCP ON...");

 pinMode(M_VELOCIDAD, OUTPUT);
 pinMode(M_ATRAS,OUTPUT);
 pinMode(M_ADELANTE,OUTPUT);
 velocidad(0);
 servo.attach(7);  // Selecionamos el pinde control para el servo  Rango: 0<->155
 Serial.println("Posicion delservo: "+String(servo.read()));

}

void loop()
{ 
if(ESP8266.available())
 {
   if(ESP8266.findUntil("+IPD,","."))
   {
      vel=ESP8266.readStringUntil(';').toInt();
      mar=ESP8266.readStringUntil(';');
      rot=ESP8266.readStringUntil(';').toInt();
      velocidad( vel);
      marcha(mar);
      rotacion(rot);
      Serial.println(String(vel)+"-"+mar+"-"+String(rot));
   }        
 }
}

void marcha(String tipo){
      if(tipo == "del")
     {
      //Serial.println("Adelante?");
       digitalWrite(M_ATRAS,LOW);
       digitalWrite(M_ADELANTE,HIGH);
     }
     else if(tipo == "tra")
     {
      //Serial.println("Atras?");
       digitalWrite(M_ATRAS,HIGH);
       digitalWrite(M_ADELANTE,LOW);
     }

}
void velocidad(int v){
  //Serial.println("Velocidad: "+String(v));
  analogWrite(M_VELOCIDAD, v); 
} 

void rotacion(int r){
    int rot =map(r,-10, 10, 125, 0); //mapeamos los valores que puede tener el acelerometro a los valores que puede tener el servo
    //Serial.println("Acelerometro: "+String(r)+" Servo: "+String(rot));
    servo.write(rot);
}
void comandoESP(String cmd)
{
  ESP8266.println(cmd);

  if(ESP8266.available())
    Serial.println(ESP8266.readStringUntil(14));

  delay(1000*3); //3seg
}

Y porque tienes que usar SoftwareSerial a 115Kbps?
Porque no bajas la velocidad a algo potable, como 19200 o 9600.
Incluseo 9600 bps debería ser mas que suficiente para tu app.
Cambia la velocidad del ESP8266. Recompila y nos dices como resulta.

muchas gracias surby, he actualizado el firmware de esp, le he bajado a 19200 baudio y perfecta comunicación ;D.

Lo sabía... no se porque muchos reportan como tú problemas en 115K. es mucho para el arduino (UNO/NANO) tal vez no para Mega/DUE/Yun