Buenas tardes roboseros.

Esta vez estoy programando la conexión bluetooth de mi coche lunar, pero no me está leyendo correctamente los caracteres que le paso por BT.

Me explico..
Conecto el BT del PC al modulo BT que tengo en el Megapi a través de Putty (a 9600). Esto aparentemente lo hace bien, el programa espera hasta que llegue un valor a través del BT con la instrucción: "while(!blue.available())" , pero luego tengo una rutina que evalúa con una instrucción "switch", y es aquí donde no entra por el "case" que quiero y que es la letra que le envío por el BT, resulta que siempre entra por el "default:". He puesto un "println" para ver el valor de la variable enviada y siempre me muestra el valor "⸮" invertido.

Ejemplo de la salida de los println:

Listos <-- aquí espera por el BT
⸮ <-- aquí cuando recibe el valor y lo muestra
case default  <-- y aquí cuando es evaluado por el switch :-(
case default  <-- y ya se queda pegado en este punto de por vida
case default

y se queda después en un bucle permanente.

Aquí el programa completo.

/* elrobot     */
#include "MeMegaPi.h"
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <Wire.h>

MeMegaPiDCMotor m1D(PORT1A); //Motor 1 derecha
MeMegaPiDCMotor m1I(PORT1B); //Motor 1 izquierda
MeMegaPiDCMotor m2D(PORT2A); //Motor 3 derecha
MeMegaPiDCMotor m2I(PORT2B); //Motor 3 izquierda
MeMegaPiDCMotor m3D(PORT3A); //Motor 3 derecha
MeMegaPiDCMotor m3I(PORT3B); //Motor 3 izquierda

MeBluetooth blue(PORT_15); //El Bluetooth

Servo s1D;
Servo s1I;
Servo s2D;
Servo s2I;

char direccion;

void setup()
{
// motores
  m1D.stop();
  m1I.stop();
  m2D.stop();
  m2I.stop();
  m3D.stop();
  m3I.stop();
   //servos van del 60 AL 69 SON A6 AL A15
  s1D.attach(60); s1D.write(90);
  s1I.attach(61); s1I.write(90);
  s2D.attach(62); s2D.write(90);
  s2I.attach(63); s2I.write(90);
  // communicaciones
  Serial.begin(9600);
  blue.begin(9600);
  Serial.println("Listos");  
}

void loop()
{
  direccion=leeBT();
  Serial.println(direccion);
  direccionServos(direccion);
  delay(5000);
}

char leeBT(){
  char comando = ' ';
  while(!blue.available())  {
    comando=blue.read(); 
    blue.flush();
    }
  return comando;
}


void direccionServos(char direccion) {
switch (direccion) {
  case 'i':
    s1D.write(170); s1I.write(170); s2D.write(10); s2I.write(10);
    Serial.println("case i");
    break;
  case 'd':
    s1D.write(10); s1I.write(10); s2D.write(170); s2I.write(170);
    Serial.println("case d");
    break;
  case 'c':
    s1D.write(90); s1I.write(90); s2D.write(90); s2I.write(90);
    Serial.println("case c");
    break;
  default: 
  Serial.println("case default");
  break;
}
}

Cualquier ayuda, es bienvenida.

Un saludo.

Buenas tardes roboseros. Esta vez estoy programando la conexión bluetooth de mi coche lunar, pero no me está leyendo correctamente los caracteres que le paso por BT. Me explico.. Conecto el BT del PC al modulo BT que tengo en el Megapi a través de Putty (a 9600). Esto aparentemente lo hace bien, el programa espera hasta que llegue un valor a través del BT con la instrucción: "while(!blue.available())" , pero luego tengo una rutina que evalúa con una instrucción "switch", y es aquí donde no entra por el "case" que quiero y que es la letra que le envío por el BT, resulta que siempre entra por el "default:". He puesto un "println" para ver el valor de la variable enviada y siempre me muestra el valor "⸮" invertido. Ejemplo de la salida de los println: ```` Listos <-- aquí espera por el BT ⸮ <-- aquí cuando recibe el valor y lo muestra case default <-- y aquí cuando es evaluado por el switch :-( case default <-- y ya se queda pegado en este punto de por vida case default ```` y se queda después en un bucle permanente. Aquí el programa completo. ```` /* elrobot */ #include "MeMegaPi.h" #include <Arduino.h> #include <SoftwareSerial.h> #include <Wire.h> MeMegaPiDCMotor m1D(PORT1A); //Motor 1 derecha MeMegaPiDCMotor m1I(PORT1B); //Motor 1 izquierda MeMegaPiDCMotor m2D(PORT2A); //Motor 3 derecha MeMegaPiDCMotor m2I(PORT2B); //Motor 3 izquierda MeMegaPiDCMotor m3D(PORT3A); //Motor 3 derecha MeMegaPiDCMotor m3I(PORT3B); //Motor 3 izquierda MeBluetooth blue(PORT_15); //El Bluetooth Servo s1D; Servo s1I; Servo s2D; Servo s2I; char direccion; void setup() { // motores m1D.stop(); m1I.stop(); m2D.stop(); m2I.stop(); m3D.stop(); m3I.stop(); //servos van del 60 AL 69 SON A6 AL A15 s1D.attach(60); s1D.write(90); s1I.attach(61); s1I.write(90); s2D.attach(62); s2D.write(90); s2I.attach(63); s2I.write(90); // communicaciones Serial.begin(9600); blue.begin(9600); Serial.println("Listos"); } void loop() { direccion=leeBT(); Serial.println(direccion); direccionServos(direccion); delay(5000); } char leeBT(){ char comando = ' '; while(!blue.available()) { comando=blue.read(); blue.flush(); } return comando; } void direccionServos(char direccion) { switch (direccion) { case 'i': s1D.write(170); s1I.write(170); s2D.write(10); s2I.write(10); Serial.println("case i"); break; case 'd': s1D.write(10); s1I.write(10); s2D.write(170); s2I.write(170); Serial.println("case d"); break; case 'c': s1D.write(90); s1I.write(90); s2D.write(90); s2I.write(90); Serial.println("case c"); break; default: Serial.println("case default"); break; } } ```` Cualquier ayuda, es bienvenida. Un saludo.
200
vistas
0
respuestas
1
seguidores
vista previa (en vivo)
introduzca al menos un 10 caracteres
Advertencia: Mencionaste a %MENTIONS%, pero ellos no pueden ver el mensaje y no serán notificados
Guardando...
Guardado
Todos los posteos de este tema serán borrados ?
Borrador pendiente ... Click para continuar editando
Descartar borrador