Hola, tengo un proyecto para enviar la distancia que me da un módulo HC-SR04 por bluetooth al teléfono móvil, mediante una app Arduino Controller bluetooth. Funciona correctamente desde el móvil al Arduino, pero no entra en el bucle while (Serial.available()). Si quiero recibir en el telefono los datos enviados desde el sensor de distancia, los tengo que poner fuera del bucle.
#include <SoftwareSerial.h>
SoftwareSerial BtFDS(10,11);
#include "SR04.h"
#define TRIG_PIN 8 //cable azul
#define ECHO_PIN 9 //cable blanco
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
#define LED_AMARILLO 2
#define LED_VERDE 3
//long a;
long myChar ;
void setup() {
Serial.begin(9600);
Serial.println("Listo");
BtFDS.begin(38400);
// BtFDS.println("14");
pinMode(LED_AMARILLO, OUTPUT);
digitalWrite(LED_AMARILLO,0);
pinMode(LED_VERDE, OUTPUT);
digitalWrite(LED_VERDE,0);
}
void loop() {
myChar=sr04.Distance();
Serial.println(myChar);
//Serial.println("a ver");
//BtFDS.print(myChar);
while (BtFDS.available()) { //funciona
myChar = BtFDS.read();
Serial.println(myChar);
digitalWrite(LED_VERDE,1); // el led VERDE conectado al pin 3 se enciende cuando se RECIBEN los datos enviados desde el telefono
}
while (Serial.available()) { //aquí no entra
myChar = Serial.read();
Serial.print(myChar);
BtFDS.print(myChar);
digitalWrite(LED_AMARILLO,1); // el led AMARILLO conectado al pin 3 se enciende cuando se RECIBEN los datos enviados desde el telefono
}
delay(1000);
}
En el Monitor Serial recibo los datos si los envío desde fuera del while y los envía al móvil, poniendo:
void loop() {
myChar=sr04.Distance();
Serial.println(myChar);
Serial.println("a ver");
BtFDS.print(myChar);
pero si suprimo estas líneas no entra, es decir, no (Serial.available()). No se como hacer para que entre en el bucle, encienda el led y envíe los datos.
A ver, ¿vos querés ingresar los dados desde la consola?
Entiendo que no, los lees del sensor, entonces no hay nada disponible en el puerto serie para leer.
Por eso nunca va a entrar en el lazo. ¿Se entiende?
Lo siento, creo que no me explico con claridad. Si leo el sensor nada mas empezar el void loop, lo envío al Monitor Serie de mi PC
myChar=sr04.Distance();
Serial.println(myChar);
Serial.println("a ver");
BtFDS.print(myChar);
lo envía correctamente a la app. Pero sigue sin entrar en el bucle
myChar = Serial.read();
Serial.print(myChar);
BtFDS.print(myChar);
digitalWrite(LED_AMARILLO,1);
Como debo hacer para que entre en este bucle y desde ahí transmita los datos al móvil.
devuelve un valor mayor a 0 si hay caracteres recibidos en el buffer serie y para que haya caracteres debes enviarlos desde la consola (u otro dispositivo con conexión serie).
Como vos no envías nada desde la consola nunca se cumple que
Serial.available()
sea mayor a 0 entonces no entra en el lazo.
Fijate que en caso del bluetooth, cuando envías algo desde el móvil, sí se cumple que
BtFDS.available()
es mayor que 0 y entonces entra al lazo while() y reenvía a consola lo que recibe por bt caracter a caracter hasta que no queda nada por leer.
Lo que quieres hacer no necesita de ningún lazo, lees la distancia y la envías a consola y al bt. Listo.
Moderador:
Edita los post #3 y #5
Lee las Normas del foro y publica/edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado/editado, lo cortas y click en (<CODE/>)