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.