Pages: [1]   Go Down
Author Topic: Problema EEPROM (SOLUCIONADO)  (Read 951 times)
0 Members and 1 Guest are viewing this topic.
Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Estoy trabajando en una alarma. Cuando salta, según el sensor que sea, se guarda en la EEPROM una memoria de alarma.Es decir, si salta, cuando la desactivas sale en un lcd : alarma en memoria pasillo.
Para grabar los valores uso ésto
Quote
  EEPROM.write(1,1);//EEPROM ENTRADA
   EEPROM.write(0,1);//EEPROM PASILLO
Ésta es la función que estoy usando para interpretar lo que está grabado.
Code:
memoriapasillo=EEPROM.read(0);  
  if(memoriapasillo==1);
  {         lcd.clear();
            lcd.setCursor(0, 0);
            lcd.print("Alarma en memoria");  
            lcd.setCursor(0, 1);
            lcd.print("    Pasillo");
            delay(1000);
  }
memoriaentrada=EEPROM.read(1);
  if(memoriaentrada==1);{
             lcd.clear();
             lcd.setCursor(0, 0);
             lcd.print("Alarma en memoria");  
             lcd.setCursor(0, 1);
             lcd.print("     Entrada");
             delay(1000);

Para saber que está grabado, saco por la consola los valores
Code:
Serial.print(EEPROM.read(0));
 Serial.print(EEPROM.read(1));
Cada vez que se reactiva la alarma borro los datos de la EEPROM, mejor dicho, grabo 0 en los 2 sitios.
Code:
EEPROM.write(0,0);//BORRO MEMORIA PASILLO
                    EEPROM.write(1,0);//BORRO MEMORIA ENTRADA
                  

El problema es que siempre aparece en la lcd: alarma en memoria pasillo y alarma en memoria entrada.PERO en la consola si que salen bien los valores, es decir, si ha saltado en pasillo sale un 1. Si ha saltado en la entrada sale un 1. Si rearmo(borro los datos) salen ceros en la consola.

ES DECIR el tema funciona, el problema está que en la función que uso para interpretar lo grabado, no reconoce el número.


Gracias de antemano. Espero que tengáis paciencia con todo el rollo.
« Last Edit: April 11, 2012, 06:16:38 am by a9965 » Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quita esto en todos los if que tengas

if(memoriapasillo==1);
  {

Al poner el punto y coma ahí, estás haciendo un if vacio, sin relación al código que sigue.
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

VALE. Parecerá un poco no creible, pero he ido a hacer otra cosa y con la mente un poco despejada se me había ocurrido poner else a los if. Resulta que si funcionaba pero iba a postear que por qué. El tema estaba resuelto pero no sabía por qué.
Pues nada chiva muchisimas gracias por esa rapidez. La verdad que pensaba que esto iba para largo, de nuevo muchas gracias.
Un saludo =)
Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cuando pasan estas cosas, lo mejor es olvidarse un rato o hasta el día siguiente y en cuanto te pongas otra vez lo verás enseguida.
La verdad es que estos fallos que casualmente dan código válido son un poco puñeteros de encontrarlos.

Un saludo y de nada smiley-wink
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No se si postear aquí pero necesito una cosa más.

Imaginemos que esta alarma la instalo en algún sitio. Si la instao en un sitio, tendrá unas zonas y si la instalo en otro pues lógicamente tendrá otras.
Como en cada sitio cambian las zonas, tendría que cambiar en más de 100 líneas de código las zonas en el lcd. Para evitar ésto he pensado en cambiar sólo al principio del código(donde se introducen las variables y demás, antes del void setup() ) el nombre de las zonas, entonces tan sólo cambiando ahí la información, en los lcd sale lo que he puesto al principio, sin cambiar 100 y pico líneas de código.

Code:

int salón;
int zona1=salón;
void setup()
{
}
void loop(){
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Presencia en");
        lcd.setCursor(0, 1);
        lcd.print(zona1);
        delay(1000);}
}


Ésto es lo que se me ha ocurrido. Pero me sale en la lcd Presencia en 0.

Chiva, tú que estás por este post quizás puedas ayudarme, porque ya sabes de que va la cosa. En caso contrario, ya que nadie se va a meter aquí lo pongo en un nuevo post.


GRACIAS DE NUEVO =)=)
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 724
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
poniendo
Code:
int salón;
int zona1=salón;
no haces nada, si ha "salón" no le has dado ningún valor, "zona1" tendrá un valor aleatorio.
(El compilador te deja poner palabras con acento, como "salón", en el código del programa?)

Parece que lo que pretendes es que que cada nodo tenga su id grabado en la eeprom, para que en el mensaje pueda decir dónde ocurrió la incidencia (que puede ser  un sistema como "1", "2" o "pasillo", "entrada"... mejor que sea corto de un carácter). No sé qué sistema de red usas para enlazar todos los nodos; yo estoy montando algo parecido con una red de módulos nRF24L01+ con una librería que se llama "RF24Network". En esa librería se usa el sistema mencionado, cada nodo tiene grabado su id en la eeprom, y el código del programa es único para todos los nodos.




« Last Edit: April 09, 2012, 09:20:07 pm by curro92 » Logged

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No no, lo de la EEPROM ya está solucionado y funciona perfecto. El problema ahora es del LCD. Quiero que los nombres de las zonas solo tenga que cambiarlas al principio.

Gracias
Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No se exactamente que querías hacer pero el código hace exactamente lo que le has dicho.
salón vale 0 (el compilador probablemente inicialice siempre a 0), por lo que copias ese valor a zona1, que luego lo imprimes y como es lógico pues te aparece un 0.

Me parece que te vendría bien mirar algún manual/tutorial sobre cadenas de carácteres en C o el tipo de variable String en Arduino, ya que la solución es más compleja que eso, debido a que intervienen punteros (cosa que también deberías mirarte, difíciles pero necesarios para llegar más lejos de parpadear un led).

Y como dice curro92, no es muy buena práctica nombrar variables  con carácteres con acentos y símbolos
« Last Edit: April 10, 2012, 04:34:46 am by chiva » Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias de nuevo! Voy a mirarme lo que dices. Si no he entendido mal, con eso puedo asignarle a una variable caracteres.

Gracias por todo. Ya os voy comentando.
Saludos!
Logged

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

PERFECTO. He leido información acerca de las Strings en C y Java. Todo ha ido perfecto. Es lo que buscaba. Ahora cambio un solo valor y sale en las 100 y pico líneas lo que yo quiero.

De nuevo y por última vez( jejeje) mil gracias!!
Logged

Pages: [1]   Go Up
Jump to: