Go Down

Topic: Problemas al guardar en EEPROM (Read 126 times) previous topic - next topic

Saw95

Dec 06, 2015, 09:01 am Last Edit: May 19, 2017, 05:24 pm by surbyte Reason: Código debe llevar etiqueta </>
Buenas  noches, quisiera saber como poder guardar números mayores de 255 en EEPROM. En si ocupo valores de 0 a  1634, aquí esta el código:

Code: [Select]
#include <EEPROM.h>
float addr = 0,ss=0;
void setup() {
 Serial.begin(115200);
}

void loop() {
 if(Serial.available()>0){
   float val = Serial.parseInt();
 val/=10;
 EEPROM.write(addr, val);
 ss=EEPROM.read(addr);
 Serial.println(ss);
 delay(2);
 }
}

noter

Evidentemente necesitas guardar el valor repartido en varias posiciones de memoria, y luego recomponerlo partiendo de esas posiciones. Para un int, por ejemplo, necesitarás dos posiciones.
Sabiendo cuánta memoria necesita cada tipo de dato, una buena opción sería utilizar estas plantillas para guardar cualquier dato, incluso estructuras.

GO_zalo

tu numero es mayor que 255 por tanto ocupa dos bytes

Tienes que guardarlo en dos direcciones la primera byte de menos peso (por ejemplo) y en la segunda el resto

Code: [Select]


EEPROM.write(addr , va &  0x00FF);
EEPROM.write(addr+1, val  >> 8);



para leer tienes que hacer el proceso inverso:
Code: [Select]


ss_L=EEPROM.read(addr);
ss_H=EEPROM.read(addr+1);

ss= (ss_h<<8) | ss_L;






patourrutia

Aqui esta solucion completa a este problemita!!


#include <EEPROM.h>
int Direccion;

void setup() {
  Direccion = 100;
  Serial.begin(9600);
}

void loop() {

      int A = 800;
      int B = 0;
     
      byte L;
      byte H;
     
     
      H = highByte(A);
      L = lowByte(A);
     
     
      EEPROM.write(Direccion, H);
      EEPROM.write(Direccion + 1, L);
      L=EEPROM.read(Direccion);
      H=EEPROM.read(Direccion + 1);
      B = (L<<8) | H;
     
      Serial.println(B);   

}

surbyte

El tema es del 2015, la solución ya la habia dado Go_zalo pero el autor no se dignó en responder.

No revivas hilos que tengan mas de 120 dias aún con el aporte positivo que has hecho.
Lo dejo porque ayudas pero tenlo en cuenta a futuro.

Cierro el hilo porque esta solucionado hace 2 años y ahora mejor aún.

Go Up