Skip to main content

Bluetooth IV El programa en mBlock

Te recomendamos estas páginas:

sotros vamos a utilizar la APP BlueControl:

Problema número 1: ocupamos el puerto serie

Si has leído Cómo se comunica con un Arduino habrás visto que ocupamos LOS MISMOS PINES D0 Y D1 QUE UTILIZA EL ARDUINO PARA COMUNICARSE POR EL PUERTO SERIE CON EL ORDENADOR.

Esto crea un problema: No se puede tener conectado el HC-06 mientras nos comunicamos el ordenador con el Arduino.

Solución: Pues quítalo, y luego cuando acabes de descargar el programa en el Arduino, pues lo pones.

Bah!! ¿sólo era eso? pues no, que nos ocupe el puerto serie nos fastidia: ¿puedes interaccionar con el Sprite? por ejemplo ¿puedes hacer que el oso panda de mBlock se mueva según el mando de BlueControl?...NO

Problema 2 la velocidad del puerto es elevada

Al programar con mBlock fija la velocidad del puerto serie a 115200 baudios, y nuestro HC-06 soporta 9600

Solución: Bajarlo manualmente, un rollo, tenemos que salir de mBlock, editarlo en Arduino IDE .... esto se ve mejor en el ejemplo siguiente.

Reto: Encendido y apagado de LEDs con el móvil

Vamos a ejecutar este pequeño programa, que al apretar el botón de arriba se encienden los leds y al apretar el de abajo se apagan:

Solución

image-1648741316977.png

Primero hay que vincular el móvil con la APP



Segundo hay que subir el programa solucionando los problemas anteriores

Mejor verlo con esta presentación:



O sea, ya podemos jugar con el móvil y con nuestro Echidna !!!

Por ejemplo.. se podría hacer un coche teledirigido, el programa lo tienes en el repositorio: https://github.com/JavierQuintana/Echidna y el vídeo en el muro

// generated by mBlock5 for <your product>
// codes make you happy

#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>

void _delay(float seconds) {
  long endTime = millis() + seconds * 1000;
  while(millis() < endTime) _loop();
}

void setup() {
  pinMode(13,OUTPUT);
  Serial.begin(9600);
  digitalWrite(13,0);
  while(1) {
      if(Serial.available() > 0){
        if(Serial.read() == 'a'){
          digitalWrite(13,1);
        }else{
          digitalWrite(13,0);
        }

      }

      _loop();
  }

}

void _loop() {
}

void loop() {
  _loop();
}