Go Down

Topic: Problema de Comunicación Arduino UNO - HC-06 - App Inventor (Read 351 times) previous topic - next topic

EliArt

Oct 12, 2017, 07:48 pm Last Edit: Oct 13, 2017, 01:02 am by surbyte Reason: Las imagenes deben verse. Usa etiquetas.
Hola amigos, hace tiempo no pasaba por acá pues había estado lejos de los proyectos. Sucede que estoy haciendo un coche simple, de dos motores y puente h que recibe los comandos de un celular android con una App desarrollada en AppInventor.

Los comandos son simples letras Mayúsculas (A, B, C, D, E) he tenido varios problemas con la conexión via bluetooth usando el módulo HC-06, sin embargo ya he logrado vincularlos y tener comunicación; el problema es que no me recibe correctamente los caracteres enviados, la respuesta siempre es "-1" de modo que nada funciona.

Adjunto El código y la imagen del monitor serial por si alguien puede ayudarme, les agradezco mucho!



Code: [Select]
#include <SoftwareSerial.h> //Librería que permite establecer comunicación serie en otros pins

//Aquí conectamos los pins RXD,TDX del módulo Bluetooth.
SoftwareSerial BT(10, 11); //10 RX, 11 TX.
char estado;
int izqA = 7;
int izqB = 8;
int derA = 4;
int derB = 9;
int pwmpin[2] = {5, 6}; // PWM input
int Enapin[2] = {A0, A1}; // Enable input

void setup()  {
  Serial.begin(9600); //Abrimos la comunicación serie con el PC y establecemos velocidad
  delay (200);
  BT.begin(9600); //Abrimos la comunicación serie con el Módulo BT y establecemos velocidad
  delay (200);
  pinMode(derA, OUTPUT);
  pinMode(derB, OUTPUT);
  pinMode(izqA, OUTPUT);
  pinMode(izqB, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(A0, OUTPUT);
  pinMode(A1, OUTPUT);
  analogWrite(5, 100);
  analogWrite(6, 100);
  digitalWrite(A0, HIGH);
  digitalWrite(A1, HIGH);
}

void loop()  {
  if (BT.available()) {
    estado = BT.read();
    Serial.println("Recibiendo");
    Serial.println(BT.read());
    //Adelante
    if (estado == 'A') {
      Serial.println("Adelante");
      digitalWrite(7, LOW);
      digitalWrite(8, HIGH);
      digitalWrite(4, LOW);
      digitalWrite(9, HIGH);
      analogWrite(5, 250);
      analogWrite(6, 235);
    }
    //Izquierda
    if (estado == 'B') {
      Serial.println("Izquierda");
      digitalWrite(7, LOW);
      digitalWrite(8, HIGH);
      digitalWrite(4, LOW);
      digitalWrite(9, LOW);
      analogWrite(5, 255);
      analogWrite(6, 255);
    }
    //Derecha
    if (estado == 'D') {
      Serial.println("Derecha");
      digitalWrite(7, LOW);
      digitalWrite(8, LOW);
      digitalWrite(4, LOW);
      digitalWrite(9, HIGH);
      analogWrite(5, 255);
      analogWrite(6, 255);
    }
    //Atrás
    if (estado == 'C') {
      Serial.println("Atrás");
      analogWrite(5, 255);
      analogWrite(6, 255);
      digitalWrite(7, HIGH);
      digitalWrite(8, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(9, LOW);
    }
    //Parar
    if (estado == 'E') {
      Serial.println("Detener");
      digitalWrite(derA, LOW);
      digitalWrite(izqA, LOW);
      digitalWrite(derB, LOW);
      digitalWrite(izqB, LOW);
    }
  }
}





EliArt

Hola, aún no logro solucionarlo... Pensé que era el módulo y compré otro HC-06 y aún no logro recibir los datos.

Carias

La velocidad de conexión está bien? me ha pasado que el modulo bluetooth esta fijado a otra velocidad y entonces o no recibe nada o recibe caracteres extraños. .

Lucario448

Puede que sí lo esté recibiendo bien, lo que sucede es que está mal programada la depuración. Así debería ser:
Code: [Select]
Serial.print("Recibiendo: ");
Serial.println(estado);


read retorna un int; cuando retorna -1 es porque hubo un error al recuperar un byte/caracter. En este caso, el error siempre es por buffer vacío. Digo... mira lo que estabas haciendo:
Code: [Select]
if (BT.available()) {
  estado = BT.read();
  Serial.println("Recibiendo");
  Serial.println(BT.read());

La verificación de disponibilidad está correcta; sin embargo, si observas muy bien, ya "consumiste" el byte/caracter cuando se lo asignaste a la variable. No sorprende tu resultado al intentarlo por segunda vez...

Go Up