App se congela despues de unos segundos

Hola a todos.

Ayer termine de montar y programar un coche controlado desde el smartphone utilizando el giroscopio del mismo. El problema es que al poco tiempo de poner el coche en marcha y empezar a utilizarlo, la App del movil se queda congelada y no responde a los movimientos y o se si es problema del codigo que estoy utilizando en Arduino o problema de la App..

Este es el codigo que estoy utilizando:

#include <Servo.h>

byte serialA;

int IN3 = 5;    // Input3 conectada al pin 5
int IN4 = 6;    // Input4 conectada al pin 6

Servo servo1;
Servo servo2;

void setup()
{

  Serial.begin(9600);

  pinMode (IN3, OUTPUT);
  pinMode (IN4, OUTPUT);

  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  servo1.attach(3);
  servo2.attach(4);
  servo1.write(85);
  servo2.write(83);

}

void loop()
{

  if (Serial.available() > 0) {

    serialA = Serial.read();
    Serial.println(serialA);

    switch (serialA) {

      case 50:
        digitalWrite (IN3, HIGH);
        digitalWrite (IN4, LOW);
        break;

      case 56:
        digitalWrite (IN3, LOW);
        digitalWrite (IN4, HIGH);
        break;

      case 53:
        digitalWrite (IN3, LOW);
        digitalWrite (IN4, LOW);
        servo1.write(85);
        servo2.write(83);
        break;

      case 54:
        servo1.write(70);
        servo2.write(70);
        break;

      case 52:
        servo1.write(100);
        servo2.write(100);
        break;

    }
  }
}

Para la direccion utilizo 2 servo y para la traccion utilizo un motor dc controlado por un driver L298N. Para la alimentacion utilizo 4 baterias 18650 que dan un volatje de unos 14 voltios con los que alimento al driver L298N. Para alimentar Arduino, los servo, el modulo bluetooh y la parte logica del driver L298N, utilizo un pequeño regulador de voltaje.

El codigo fuente de la App no lo tengo ya que me la baje del play store.. En fin, a ver si alguien sabe que puede estar pasando..

Unas fotos del coche:

Gracias.

A ver no quiero que te moleste mi comentario pero hablas de una APP que se congela y no dices cual, muestras 3 imágenes bellas de tu DIYCarRobot pero que no dicen mucho.

Lo único que puedes hacer es conectarte al UNO via monitor serie, y lee que comandos recibes desde la APP
Si se cuelga es problema de la APP
Además no entiendo como el Arduino recibe los datos???
Como le pasa la información la APP al robot? debería ser por BT como mínimo o WIFI si fuera algo mas avanzado.
Tu código no tiene anda de eso.
Mira el comentario donde esta el Serial.print

#include <Servo.h>

byte serialA;

int IN3 = 5;    // Input3 conectada al pin 5
int IN4 = 6;    // Input4 conectada al pin 6

Servo servo1;
Servo servo2;

void setup()
{

  Serial.begin(9600);

  pinMode (IN3, OUTPUT);
  pinMode (IN4, OUTPUT);

  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  servo1.attach(3);
  servo2.attach(4);
  servo1.write(85);
  servo2.write(83);

}

void loop()
{

  if (Serial.available() > 0) {

    serialA = Serial.read();
    Serial.println(serialA);   // <=== OBSERVA que sale por el monitor Serie. ya lo tenias y no le diste 
                                       // la debida atención

    switch (serialA) {

      case 50:
        digitalWrite (IN3, HIGH);
        digitalWrite (IN4, LOW);
        break;

      case 56:
        digitalWrite (IN3, LOW);
        digitalWrite (IN4, HIGH);
        break;

      case 53:
        digitalWrite (IN3, LOW);
        digitalWrite (IN4, LOW);
        servo1.write(85);
        servo2.write(83);
        break;

      case 54:
        servo1.write(70);
        servo2.write(70);
        break;

      case 52:
        servo1.write(100);
        servo2.write(100);
        break;

    }
  }
}

No me molesta tu comentario para nada.. es cierto que me faltó poner algo de info..

Ok, Arduino se comunica con el movil por un módulo Bluetooth HC-05 conectado por tx y rx, por eso no ves nada en el código al respecto ya que no utilizo softwareserial..

Serial.println(serialA); esta línea la utilice para ver que datos llegaban del smartphone cuando lo inclino hacia adelante, atrás y los lados, de esa forma es que programe la sentencia case..

La App que utilizo se llama Accelerometer Robot de TechMania, aunque si no se dispone del código fuente da un poco lo mismo que App este utilizando..

Gracias.

O sea que recibes información del giroscopio via 0,1 pero tal vez venga demasiado rápido.
Verificaste los valores

Yo creo que en una etapa de desarrollo deberías usar SoftwareSerial en un par de pines a tu gusto y asegurarte que la App y tu Arduino reciben con Seguridad esos valores, que ya leí que lo hacen pero, supongo que tambien envia muchos valores distintos y no veo que tu código arduino tome alguna acción en ese caso.
Mas allá de eso, esta claro que el problema esta en al App que se cuelga.

Lo primero conlo que me encuentro de Accelerometer Robot de TechMania es que esta hecha en 2015 y 3 años en Android es una eternidad.

Porque no haces una app usando MIT App Inventor 2?

Te dejo un link (App inventor 2) donde justamente dice como usar el giroscopio. Te va a dar la flexibilidad que necesitas para interactuar con Arduino debidamente.

Bueno el link tiene solo información de los valores que entrega el giroscopio y como App Inventor los interpreta.
Este link esta mejor y te servirá Using Accelerometer

Otro link de instructables

Muchas gracias, cuando llegue a casa lo reviso y comentó como me fue.

Bueno pues ya está solucionado gracias a que surbyte modificó la App que estaba utilizando. Muchas gracias crack!!

Porqué no la publicas @Topor2016, ya que de lo contrario el hilo queda descolgado.

ok.

La App mas simple no puede ser, solo tiene un boton para seleccionar y conectar por Bluetooth al modulo HC-05

El proyecto esta creado en Mit App Inventor, dejo el codigo por si alguien quiere hacerle alguna modificacion:

Descargar proyecto

Y el codigo para Arduino es el siguiente. Ha sufrido algunas modificaciones desde el primer codigo que puse para adecuarlo a la nueva App:

#include <Servo.h>

byte serialA;

int IN3 = 5;    // Input3 conectado al pin 5
int IN4 = 6;    // Input4 conectado al pin 6

Servo servo1;
Servo servo2;

void setup()
{

  Serial.begin(9600);

  pinMode (IN3, OUTPUT);
  pinMode (IN4, OUTPUT);

  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  servo1.attach(3);             //Un servo de la direccion al pin 3
  servo2.attach(4);             //El otro servo al pin 4
  servo1.write(85);            //Estos son los grados para que la direccion quede recta ya que la instalacion de los servos no quedo 
  servo2.write(83);            //perfecta a 90 grados 

}

void loop()
{
  
  if (Serial.available() > 0) {
    serialA = Serial.read();

    switch (serialA) {
      
      case 1:                                   //Adelante
        digitalWrite (IN3, LOW);
        digitalWrite (IN4, HIGH);
        break;
       
      case 2:                                   //Atras
        digitalWrite (IN3, HIGH);
        digitalWrite (IN4, LOW);
        break;

      case 3:                                   //Derecha
        servo1.write(110);
        servo2.write(110);
        break;
       
      case 4:                                  //Izquierda
        servo1.write(60);
        servo2.write(60);
        break;
        
      case 0:                                 //Movil plano desactiva todos los movimientos y pone recta la direccion
        digitalWrite (IN3, LOW);
        digitalWrite (IN4, LOW);
        servo1.write(85);
        servo2.write(83);

    }
  }
}

Gest_Robo.zip (223 KB)