Buenas! como están queridos amigos.
Empecé un proyecto con una App, el objetivo es enviar una palabra (String) a través de Bluetooth y el Micro reconozca esa palabra, la procese y la compare con una palabra almacenada en la EEPROM del Micro,y luego realice una acción:
Encender una luz Verde si la palabra es correcta y encender una luz roja si la palabra es incorrecta.
Puedo realizar este procedimiento utilizando una variable con una palabra (String) fija pero no puedo lograr compararla con una palabra almacenada en la EEPROM.
Quiero utilizar la EEPROM por dos razones:
1- Crear una rutina que pueda cambiar la palabra almacenada en la EEPROM, y desde ahi empezar a comparar los valores que ingresan desde el Bluetooth con la nueva palabra.
2- En caso de que se corte la luz del dispositivo, la palabra que se cambió quede siempre guardada.
Les paso el Codigo que ya tengo.
#include <EEPROM.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,3); // 2=TX, 3=RX
int i;
char inicio=19; //variable que indica el inicio del programa
char correcto=18; // variable que indica el dato correcto
char error=17; // variable que indica dato incorrecto
char salida=16; // salida del rele/actuador
String rxbt; // variable donde se almacena la informacion recibida del BLE
String memoria; // variable donde se guarda el dato recibido despues del caracter de programacion
String apertura[9];
String prog="programar";
void setup()
{
mySerial.begin(9600); // inicio del puerto serie del BLE
Serial.begin(9600); // inicio del puerto serie de la PC
pinMode(correcto,OUTPUT); // modo de los pines i/o
pinMode(inicio,OUTPUT);
pinMode(error,OUTPUT);
}
void loop()
{
digitalWrite(inicio,HIGH); // estado de los pines
digitalWrite(correcto,LOW);
digitalWrite(error,LOW);
if (mySerial.available()) // se chequea si el puerto seria del BLE esta disponible
{
rxbt=mySerial.readStringUntil('\n');// leo valor y se lo asigno a la variable rxbt
Serial.println("DATO RECIBIDO"); // muestro en pantalla el dato recibido
Serial.println(rxbt);
Serial.println();
Serial.println("Apertura...");
Serial.println(apertura[9]);
Serial.println();
Serial.println("Memoria...");
Serial.println(memoria);
Serial.println();
Serial.println();
Serial.println("EEPROM...");
char cero=EEPROM.get(0,memoria[0]);
char uno=EEPROM.get(1,memoria[1]);
char dos=EEPROM.get(2,memoria[2]);
char tres=EEPROM.get(3,memoria[3]);
char cuatro=EEPROM.get(4,memoria[4]);
char cinco=EEPROM.get(5,memoria[5]);
char seis=EEPROM.get(6,memoria[6]);
char siete=EEPROM.get(7,memoria[7]);
char ocho=EEPROM.get(8,memoria[8]);
char nueve=EEPROM.get(9,memoria[9]);
Serial.println(cero);
Serial.println(uno);
Serial.println(dos);
Serial.println(tres);
Serial.println(cuatro);
Serial.println(cinco);
Serial.println(seis);
Serial.println(siete);
Serial.println(ocho);
Serial.println(nueve);
if(rxbt==apertura[9]) // se compara variables para hacer lo siguiente
{
digitalWrite(correcto,HIGH); // enciende luz verde
digitalWrite(inicio,HIGH); //
digitalWrite(salida,HIGH); // activa la salida del actuador
digitalWrite(error,LOW); //
Serial.println("ABIERTO"); // muestra en pantalla que se abrio la puerta
mySerial.println("TRUE");
delay(2000); // despues de 2seg. los pines vuelven a su estado inicial
digitalWrite(correcto,LOW); //
digitalWrite(salida,LOW); //
digitalWrite(inicio,HIGH); //
digitalWrite(error,LOW); //
Serial.println("CERRADO"); //
}
if (rxbt==prog) // si el valor ingresado es cualquier cosa menos el valor de PROG hace lo siguiente
{
delay (3000);
memoria=mySerial.readStringUntil('\n');
Serial.println("Valor de Memoria Cambiado a...");// Imprime en pantalla el valor nuevo
Serial.println(memoria);
apertura[9]=memoria;
for(i=0;i<9;i++)
{
EEPROM.put(i,memoria[i]);
}
digitalWrite(correcto,HIGH); // El led verde titila 3 veces para mostrar que el proceso es correcto.
delay (500);
digitalWrite(correcto,LOW);
delay (500);
digitalWrite(correcto,HIGH);
delay (500);
digitalWrite(correcto,LOW);
delay (500);
digitalWrite(correcto,HIGH);
delay (500);
digitalWrite(correcto,LOW);
delay (500);
mySerial.println("TRUE");// Imprime en pantalla el valor nuevo
mySerial.println(memoria);
delay (500);
}
else if ((rxbt!=prog)&&(rxbt!=apertura[8])&&(rxbt!='?')&&(rxbt!='⸮')) // si el valor ingresado es cualquier cosa menos el valor de PROG hace lo siguiente
{
digitalWrite(error,HIGH); // se enciende led rojo
Serial.println("Dato Incorrecto"); // se imprime en pantalla
mySerial.println("FALSE");
delay(2000); // luego de 2 seg. vuelve a su estado inicial
digitalWrite(error,LOW);
delay(1000); // luego de 2 seg. vuelve a su estado inicial
}
}
}
Como puedo hacer para almacenar los valores de la palabra nueva? El ciclo for que utilice para almacenar la palabra en la EEPROM no me funciona. Si pudieran guiarme a una solución estaría muy agradecido.