Hola a todos, tengo el siguiente problema. Estoy tratando de enviar un texto compuesto por numeros y simbolos de mi app via bluetooth a arduino, el problema es que cuando los recibe arduino, en el monitor separa los caracteres...
lo que quiero es recibir <11,8,5,12>
pero en el monitor me aparece:
19:05:01.447 -> <
19:05:02.477 -> 1
19:05:03.595 -> 1
19:05:04.622 -> ,
19:05:05.700 -> 8
19:05:06.775 -> ,
19:05:07.845 -> 5
19:05:08.920 -> ,
19:05:09.998 -> 1
19:05:11.049 -> 2
19:05:12.141 -> >
que hago mal???????????????????????
aca todo mi codigo arduino
#include <Wire.h> // incluye libreria para interfaz I2C
#include <RTClib.h> // incluye libreria para el manejo del modulo RTC
#include <LiquidCrystal_I2C.h> // Libreria para LCD
#include <DHT.h> // importa la Librerias DHT
#include <DHT_U.h>
#include <SoftwareSerial.h> // libreria que permite establecer pines digitales
#include <ezButton.h> // LIBRERIA FLOTADOR
// Definimos el pin digital donde se conecta el sensor DHT TEMPERATURA HUMEDAD
#define DHTPIN 2
// Dependiendo del tipo de sensor
#define DHTTYPE DHT11
SoftwareSerial miBT(11, 12); // pin 11 como RX, pin 12 como TX
RTC_DS3231 rtc; // crea objeto del tipo RTC_DS3231
bool evento_inicio = true; // variable de control para inicio de evento con valor true
bool evento_fin = true; // variable de control para finalizacion de evento con valor true
int CINTALED = 4; // CINTA LED (+) - pin digital 4
int LEDROJO = 3;
int LEDAMARILLO = 6;
String xxxx;
/// BLUETOOTH
char DATO = 0; // variable para almacenar caracter recibido
char DATOFOCOLUZ = 0; //variable para ON-AUT-OFF CINTA LED
LiquidCrystal_I2C lcd(0x27, 16, 2); //PANTALLA LCD)
// defino los nuevo caracter o imagenes
byte letra1[8] = { B11111, B10101, B10101, B10001, B10001, B10101, B10101, B11111 }; // HUMEDAD
byte letra2[8] = { B11111, B10001, B11011, B11011, B11011, B11011, B11011, B11111 }; // TEMPERATURA
byte letra3[8] = { B00000, B10001, B11111, B11111, B11111, B11111, B11111, B00000 }; // NIVEL LLENO
byte letra8[8] = { B00000, B10001, B10001, B10001, B10001, B10001, B11111, B00000 }; // nivel vacio
byte letra4[8] = { B01110, B11111, B11111, B11011, B11011, B01110, B01110, B00100 }; // light off
byte letra5[8] = { B01110, B10001, B10001, B10101, B10101, B01110, B01110, B00100 }; // light on
byte letra6[8] = { B11100, B10100, B11100, B00000, B00111, B00100, B00100, B00111 }; // GRADOS CELCIUS
byte letra7[8] = { B10010, B00100, B01000, B10010, B00000, B01010, B01110, B01010 }; // % HUMEDAD
byte letra9[8] = { B00100, B10101, B01010, B10001, B10001, B01010, B10101, B00100 }; // FOCOTEMP on
byte letra10[8] = { B00100, B10101, B01110, B11111, B11111, B01110, B10101, B00100 }; // FOCOTEMP off
//FLOTADOR
ezButton toggleSwitch(8); // create ezButton object that attach to pin 8;
///DHT11
int SENSOR = 2; // pin DATA de DHT22 a pin digital 2
int TEMPERATURA;
int HUMEDAD;
DHT dht(DHTPIN, DHTTYPE); // creacion del objeto, cambiar segundo parametro // por DHT11 si se utiliza en lugar del DHT22
///fin DHT22
void setup(){
Serial.begin(9600);
//pruebas
pinMode(LEDAMARILLO, OUTPUT); //pin 6 led amarillo LED
pinMode(LEDROJO, OUTPUT); // pin 3 como salida
//bluetooth
miBT.begin(38400); // comunicacion serie entre Arduino y el modulo a 38400 bps
//FLOTADOR
toggleSwitch.setDebounceTime(500); // set debounce time to 500 milliseconds
// INICIAR DHT
dht.begin(); // inicializacion de sensor
// inicializar LCD:
lcd.begin();
lcd.backlight();
lcd.clear();
lcd.createChar(1, letra1); // asigna los nuevos caracteres por numeros
lcd.createChar(2, letra2);
lcd.createChar(3, letra3);
lcd.createChar(4, letra4);
lcd.createChar(5, letra5);
lcd.createChar(6, letra6);
lcd.createChar(7, letra7);
lcd.createChar(8, letra8);
lcd.createChar(9, letra9);
lcd.createChar(10, letra10);
//LED FLOTADOR
pinMode (LEDROJO, OUTPUT); //OPCION CON FLOTADOR
//reloj
if (! rtc.begin()) { // si falla la inicializacion del modulo
Serial.println("Modulo RTC no encontrado !"); // muestra mensaje de error
while (1); // bucle infinito que detiene ejecucion del programa
}
//rtc.adjust(DateTime(__DATE__, __TIME__)); // funcion que permite establecer fecha y horario
// al momento de la compilacion. Comentar esta linea
}
void loop(){
// pruebas
pinMode(CINTALED, OUTPUT); // pin 4 como salida CINTA LUZ
//BLUETOOTH
DATO = miBT.read(); // almacena en DATO el caracter recibido desde modulo
if( DATO == '1' ) // si el caracter recibido es el numero 1
digitalWrite(LEDAMARILLO, !digitalRead(LEDAMARILLO)); // escribe valor opuesto al leido del LED rojo
DateTime fecha = rtc.now(); // funcion que devuelve fecha y horario en formato
// DateTime y asigna a variable fecha
if (DATO == 'a')
DATOFOCOLUZ = 'a';
if (DATOFOCOLUZ == 'a'){
digitalWrite(CINTALED, LOW);
Serial.println("CINTALED - APAGADO");
}
if (DATO == 'b')
DATOFOCOLUZ = 'b';
if (DATOFOCOLUZ == 'b'){
Serial.println("CINTALED - MODO AUTOMATICO");
if ( fecha.hour() == 11 && fecha.minute() == 0 ){ // si hora = 14 y minutos = 30
if ( evento_inicio == true ){ // si evento_inicio es verdadero
digitalWrite(CINTALED, HIGH); // activa modulo de CINTALED con nivel alto
Serial.println( "CINTALED encendido" ); // muestra texto en monitor serie
evento_inicio = false; // carga valor falso en variable de control
} // para evitar ingresar mas de una vez
}
if ( fecha.hour() == 11 && fecha.minute() == 2 ){ // si hora = 15 y minutos = 30
if ( evento_fin == true ){ // si evento_fin es verdadero
digitalWrite(CINTALED, LOW); // desactiva modulo de CINTALED con nivel bajo
Serial.println( "CINTALED apagado" ); // muestra texto en monitor serie
evento_fin = false; // carga valor falso en variable de control
} // para evitar ingresar mas de una vez
}
}
if (DATO == 'c')
DATOFOCOLUZ = 'c';
if (DATOFOCOLUZ == 'c'){
digitalWrite(CINTALED, HIGH);
Serial.println("CINTALED - ENCENDIDO");
}
Serial.print(fecha.day()); // funcion que obtiene el dia de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.month()); // funcion que obtiene el mes de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.year()); // funcion que obtiene el año de la fecha completa
Serial.print(" "); // caracter espacio en blanco como separador
Serial.print(fecha.hour()); // funcion que obtiene la hora de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.print(fecha.minute()); // funcion que obtiene los minutos de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.println(fecha.second()); // funcion que obtiene los segundos de la fecha completa
if ( fecha.hour() == 2 && fecha.minute() == 0 ){ // si hora = 2 y minutos = 0 restablece valores de
evento_inicio = true; // variables de control en verdadero
evento_fin = true;
}
// Imprimir en la primera línea del LCD
lcd.setCursor(0,0);
lcd.clear();
lcd.print(fecha.day()); // funcion que obtiene el dia de la fecha completa
lcd.print("/"); // caracter barra como separador
lcd.print(fecha.month()); // funcion que obtiene el mes de la fecha completa
lcd.print("/"); // caracter barra como separador
//lcd.print(fecha.year()); // funcion que obtiene el año de la fecha completa
lcd.print(fecha.year() % 100);
lcd.print(" "); // caracter espacio en blanco como separador
lcd.print(fecha.hour()); // funcion que obtiene la hora de la fecha completa
lcd.print(":"); // caracter dos puntos como separador
lcd.print(fecha.minute()); // funcion que obtiene los minutos de la fecha completa
lcd.print(":"); // caracter dos puntos como separador
lcd.print(fecha.second()); // funcion que obtiene los segundos de la fecha completa
//loop DHT
TEMPERATURA = dht.readTemperature(); // obtencion de valor de temperatura
HUMEDAD = dht.readHumidity(); // obtencion de valor de humedad
Serial.print("TEMPERATURA: "); // value to the PC monitor
Serial.println(TEMPERATURA); // each value on a new line (only on PC monitor)
miBT.print(TEMPERATURA); // value to the BT
miBT.print(","); // data separator to the BT
Serial.print("HUMEDAD: "); // value to the PC monitor
Serial.println(HUMEDAD);
miBT.print(HUMEDAD); // value to the BT
miBT.print(","); // data separator
lcd.setCursor(0, 1); // Posicion TEMPERATURA
lcd.print(TEMPERATURA);
lcd.write(byte(6));
lcd.print(" ");
lcd.print(HUMEDAD);
lcd.write(byte(7));
lcd.print(" ");
//LOOP FLOTADOR
toggleSwitch.loop(); // MUST call the loop() function first
int state = toggleSwitch.getState();
if (state == HIGH){
Serial.println("Nivel Agua OK");
miBT.print("Agua OK"); // value to the BT
miBT.print(","); // data separator
}
else{
Serial.println("Falta Agua");
miBT.print("Falta Agua"); // value to the BT
miBT.print(","); // data separator
}
if (state == HIGH){
digitalWrite(LEDROJO, LOW);
lcd.write(byte(3));
lcd.print(" ");
}
else{
digitalWrite(LEDROJO, HIGH);
lcd.write(byte(8));
lcd.print(" ");
}
//FIN LOOP FLOTADOR
String fechaact=String(fecha.day())+'/'+String(fecha.month())+'/'+String(fecha.year());
miBT.print(fechaact);
miBT.print(",");
String horaact=String(fecha.hour())+':'+String(fecha.minute());
miBT.print(horaact);
miBT.print(",");
//CINTA LED
if( digitalRead(CINTALED) ){ //if high
lcd.write(byte(5));
lcd.print(" ");
}
else{
lcd.write(byte(4));
lcd.print(" ");
}
xxxx = String(DATO);
Serial.println("--------");
Serial.println("--------");
Serial.println(xxxx);
Serial.println("--------");
Serial.println("--------");
delay(1000);
}