Estoy bastante cansado de este asunto y espero que me podáis ayudar..
De antecedente os diré que trabajaba con un arduino uno y funcionaba todo perfectamente, estoy intentando pasarme a pro mini (para ahorrar espacio) y llego el desastre...nada funcionaba.... (he tenido problemas también con la libreria servo, la cual he sustituido con funciones a mano con prueba y error con delayMicroseconds() ).
Voy a la pregunta que tengo...durante el programa yo me guardaba una variables por si se iba la luz en eeprom, pero ahora con el pro mini no funciona al quitar alimentación las direcciones se vuelven a 0.
#include <EEPROM.h>
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println(EEPROM[0]);
if (EEPROM[0]!=22) {EEPROM[0]=22;}
Serial.println(EEPROM[0]);
}
void loop() {
// put your main code here, to run repeatedly:[/color]
}
Primero que nada, por favor, edita el post y pon el código como corresponde (ver Normas del foro, punto 7). Lo mismo los resultados, ponlos igual que si fuese código. Gracias.
Respecto a tu consulta no creo tener una solución pero hay algo que me llama mucho la atención.
Se supone que una escritura en eeprom demora 3.3 ms (según la hoja de datos del ATmega328), pero en los resultados, entre la primer lectura y la posterior a la escritura hay 0 ms de diferencia.
Para confirmar que efectivamente está grabando el valor,
¿Por qué no pruebas agregar un delay de 3 ms y hacer otra lectura para ver si el resultado sigue siendo el esperado (22)?
Algo así
#include <EEPROM.h>
void setup() {[/color]
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println(EEPROM[0]);
if (EEPROM[0]!=22) {EEPROM[0]=22;}
Serial.println(EEPROM[0]);
delay(3);
Serial.println(EEPROM[0]);
}
void loop() {
// put your main code here, to run repeatedly:
}
Los datos en una EEPROM no se guardan asi.
Se guardan de este modo
#include <EEPROM.h>
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println(EEPROM.read(0));
if (EEPROM.read(0) !=22) {EEPROM.write(0, 22);}
Serial.println(EEPROM.read(0));
}
void loop() {
// put your main code here, to run repeatedly:[/color]
}
Por cierto, imposible que ese programa en un UNO funcione. Te lo discuto a muerte.
La forma en que se guardan o leen datos en la EEPROM no cambia para ningun ATmega328 y ambos UNO o PROMini son iguales.
Bueno para mi eso es nuevo, a menos que este muy equivocado.
Respeco a usarla o no en una comparación mas alla que ambos coincidamos que no es la manera adecuada, debería funcionar.
En lo personal yo suelo asignar a una variable y luego opero con la variable, comparo y hago lo que debo hacer.
Debería probar el ejemplo en un arduino a ver como se comporta.
He probado el código y funciona.
La primera vez por supuesto tenia otro dato pero los otros dos resets muestras los mismos datos
Lo que mas me sorprende es que sin estas librerías controlaba perfectamente LCD a través de I2C, DS1302 y funciones básicas; pero en cambio no funcionaba EEPROM y SERVO.