Buenas, tengo un problema con mi programa de arduino. He estado construyendo un carro controlado por bluetooh con arduino, y le agregue una pantalla lcd donde podia mandar texto por bluetooh. Ambas funciones al mismo tiempo desde una sola app de mi celular.
El programa funciona bien, pero al momento de intentar ccontrolar el carro, al enviar la señal para que avanze el carro desde mi cel, se demora unos segundos en ejecutarlo.
He probado el carro solo, sin el programa de la pantalla lcd, y funciona bien, recibe la señal rapido, creo que el problema esta en el programa de la pantalla lcd
Este es el programa:
#include<Wire.h>
#include<LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
//Variables de control y/o lectura
char valor;
String abi;
int izqA = 5;
int izqB = 6;
int derA = 10;
int derB = 11;
int vel = 255; // Velocidad de los motores (0-255)
int estado = 'g'; // inicia detenido
void setup() {
pinMode(derA, OUTPUT);
pinMode(derB, OUTPUT);
pinMode(izqA, OUTPUT);
pinMode(izqB, OUTPUT);
lcd.init();
lcd.backlight();
Serial.begin(9600); // inicia el puerto serial para comunicacion con el Bluetooth
}
void loop() {
if (Serial.available() > 0) { // lee el bluetooth y almacena en estado
estado = Serial.read();
if (estado == 'a') { // Boton desplazar al Frente
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, vel);
analogWrite(izqA, vel);
}
if (estado == 'b') { // Boton IZQ
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, vel);
}
if (estado == 'c') { // Boton Parar
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
}
if (estado == 'd') { // Boton DER
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(izqA, 0);
analogWrite(derA, vel);
}
if (estado == 'e') { // Boton Reversa
analogWrite(derA, 0);
analogWrite(izqA, 0);
analogWrite(derB, vel);
analogWrite(izqB, vel);
}
}
if (Serial.available()) //Si el puerto serie (Bluetooth) está disponible
{
valor = Serial.read(); //Lee el dato entrante via Bluetooth
if (valor == 'f') //Si el dato entrante es una A
{
pantalla_LCD(); //Llama la función que muestra el mensaje en la pantalla LCD
}
}
}
void pantalla_LCD()
{
delay(30);
while (Serial.available())
{
char c = Serial.read(); //Lee el dato entrante y lo almacena en una variable tipo char
abi += c; //Crea una cadena tipo String con los datos entrates
}
if (abi.length() > 0) //Se verifica que la cadena tipo String tenga un largo mayor a cero
{
lcd.clear(); //Borra cualquier mensaje que esté mostrando la pantalla LCD
lcd.setCursor(0, 0); //Posiciona el cursor en la Fila 0 y Columna 0 en la pantalla LCD
lcd.print(abi); //Muestra el mensaje en la pantalla LCD
abi = ""; //Limpia la variable para posteriormente leer nuevos datos
}
}