Error al guardar array en EEPROM

Hola gente! tengo un problema al intentar guardar un array en la EEPROM.
Necesito guardar 4 valores que son almacenados en el array Datos[i] en la EEPROM, luego de ser ingresados mediante un keypad.
El problema es que cuando los necesito leer para mostrarlos en un lcd, me aparece la letra a y nada mas.
El array Datos es de 4 posiciones y cada posicion varia de 0 a 100 entero. Por lo que no deberia tener problema de espacio ya que no sobrepaso el valor 255.
Estoy utilizando un arduino MEGA junto a un keypad y un LCD 20x4 I2C
Adjunto partes del codigo donde se realiza la lectura y escritura en la EEPROM.
Cuando se presiona el caracter * se guarda la informacion, en el display me aparece "Info Guardada", por lo que asumo que el programa entra en esa parte del codigo.
Escritura

    case '*':
      delay(1500);
      for (int i = 0; i < 5; i++) {
        EEPROM.write(i, Dato[i]);
      }
      lcd.clear();
      lcd.print("Info Guardada");
      delay(2000);
      break;

Lectura
Se ejecuta en el Void Setup!

  for (int i = 0; i < 5; i++) {
    Dato[i] = EEPROM.read(i);

  }

Aca dejo el codigo entero.

#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>

const int ROW_NUM    = 4; // four rows
const int COLUMN_NUM = 4; // four columns
byte customChar[] = {
  B00000,
  B01100,
  B00110,
  B11111,
  B11111,
  B00110,
  B01100,
  B00000
};
byte customChar1[] = {
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};
char keys[ROW_NUM][COLUMN_NUM] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte pin_rows[ROW_NUM] = {22, 24, 26, 28};      
byte pin_column[COLUMN_NUM] = {30, 32, 34, 36}; 

Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
LiquidCrystal_I2C lcd(0x27, 20, 4); 

int cursorColumn = 16;
int fila = 0;
char pulsacion;
String PIN_Tecleado = ""; 
char cadena[17];
int Dato[4] ;
void setup() {
  lcd.init(); 
  lcd.backlight();
  for (int i = 0; i < 5; i++) {
    Dato[i] = EEPROM.read(i);

  }
  lcd.createChar(0, customChar);
  lcd.createChar(1, customChar1);
}

void loop() {

  lcd.setCursor(0, 0);
  lcd.print("A-Velocidad:");
  //  lcd.setCursor(16,0);
  //  lcd.print(Dato[0]);
  lcd.setCursor(0, 1);
  lcd.print("B-Longitud:");
  //  lcd.setCursor(16,1);
  //  lcd.print(Dato[1]);
  lcd.setCursor(0, 2);
  lcd.print("C-Altura:");
  //  lcd.setCursor(16,2);
  //  lcd.print(Dato[2]);
  lcd.setCursor(0, 3);
  lcd.print("D-Inclinacion:");
  //  lcd.setCursor(16,3);
  //  lcd.print(Dato[3]);



  pulsacion = keypad.getKey();

  switch (pulsacion) {
    case 'A':
      fila = 0;
      lcd.setCursor(14, fila);
      lcd.write(0);
      lcd.setCursor(14, 1);
      lcd.write(1);
      lcd.setCursor(14, 2);
      lcd.write(1);
      lcd.setCursor(14, 3);
      lcd.write(1);
      break;
    case 'B':
      fila = 1;
      lcd.setCursor(14, fila);
      lcd.write(0);
      lcd.setCursor(14, 0);
      lcd.write(1);
      lcd.setCursor(14, 2);
      lcd.write(1);
      lcd.setCursor(14, 3);
      lcd.write(1);
      break;
    case 'C':
      fila = 2;
      lcd.setCursor(14, fila);
      lcd.write(0);
      lcd.setCursor(14, 0);
      lcd.write(1);
      lcd.setCursor(14, 1);
      lcd.write(1);
      lcd.setCursor(14, 3);
      lcd.write(1);
      break;
    case 'D':
      fila = 3;
      lcd.setCursor(14, fila);
      lcd.write(0);
      lcd.setCursor(14, 0);
      lcd.write(1);
      lcd.setCursor(14, 2);
      lcd.write(1);
      lcd.setCursor(14, 1);
      lcd.write(1);
      break;

    case '0' ... '9': 
      PIN_Tecleado += pulsacion; 

      lcd.setCursor(cursorColumn, fila); 
      lcd.print(pulsacion);
      cursorColumn++;                 
      break;

    case '#': 
      PIN_Tecleado.toCharArray(cadena, 17);
      Dato[fila] = atof (cadena);
      PIN_Tecleado = "";
      cursorColumn = 16;
      lcd.setCursor(16, fila);
      lcd.print(Dato[fila]);
      break;
    case '*':
      delay(1500);
      for (int i = 0; i < 5; i++) {
        EEPROM.write(i, Dato[i]);
      }
      lcd.clear();
      lcd.print("Info Guardada");
      delay(2000);
      break;
  }   
}

Esta es la forma mas fácil de resolverlo, usando EEPROM.get y EEPROM.put busca en arduino.cc para saber como funcionan.

#include <Arduino.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>

const int ROW_NUM    = 4; // four rows
const int COLUMN_NUM = 4; // four columns
byte customChar[] = {
  B00000,
  B01100,
  B00110,
  B11111,
  B11111,
  B00110,
  B01100,
  B00000
};
byte customChar1[] = {
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};
char keys[ROW_NUM][COLUMN_NUM] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte pin_rows[ROW_NUM] = {22, 24, 26, 28};      
byte pin_column[COLUMN_NUM] = {30, 32, 34, 36}; 

Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
LiquidCrystal_I2C lcd(0x27, 20, 4); 

int cursorColumn = 16;
int fila = 0;
char pulsacion;
String PIN_Tecleado = ""; 
char cadena[17];
int Dato[4] ;

void setup() {
  lcd.init(); 
  lcd.backlight();
  EEPROM.get(0, Dato);
  lcd.createChar(0, customChar);
  lcd.createChar(1, customChar1);
}

void loop() {

  lcd.setCursor(0, 0);
  lcd.print("A-Velocidad:");
  //  lcd.setCursor(16,0);
  //  lcd.print(Dato[0]);
  lcd.setCursor(0, 1);
  lcd.print("B-Longitud:");
  //  lcd.setCursor(16,1);
  //  lcd.print(Dato[1]);
  lcd.setCursor(0, 2);
  lcd.print("C-Altura:");
  //  lcd.setCursor(16,2);
  //  lcd.print(Dato[2]);
  lcd.setCursor(0, 3);
  lcd.print("D-Inclinacion:");
  //  lcd.setCursor(16,3);
  //  lcd.print(Dato[3]);



  pulsacion = keypad.getKey();

  switch (pulsacion) {
    case 'A':
      fila = 0;
      lcd.setCursor(14, fila);
      lcd.write(0);
      lcd.setCursor(14, 1);
      lcd.write(1);
      lcd.setCursor(14, 2);
      lcd.write(1);
      lcd.setCursor(14, 3);
      lcd.write(1);
      break;
    case 'B':
      fila = 1;
      lcd.setCursor(14, fila);
      lcd.write(0);
      lcd.setCursor(14, 0);
      lcd.write(1);
      lcd.setCursor(14, 2);
      lcd.write(1);
      lcd.setCursor(14, 3);
      lcd.write(1);
      break;
    case 'C':
      fila = 2;
      lcd.setCursor(14, fila);
      lcd.write(0);
      lcd.setCursor(14, 0);
      lcd.write(1);
      lcd.setCursor(14, 1);
      lcd.write(1);
      lcd.setCursor(14, 3);
      lcd.write(1);
      break;
    case 'D':
      fila = 3;
      lcd.setCursor(14, fila);
      lcd.write(0);
      lcd.setCursor(14, 0);
      lcd.write(1);
      lcd.setCursor(14, 2);
      lcd.write(1);
      lcd.setCursor(14, 1);
      lcd.write(1);
      break;

    case '0' ... '9': 
      PIN_Tecleado += pulsacion; 

      lcd.setCursor(cursorColumn, fila); 
      lcd.print(pulsacion);
      cursorColumn++;                 
      break;

    case '#': 
      PIN_Tecleado.toCharArray(cadena, 17);
      Dato[fila] = atof (cadena);
      PIN_Tecleado = "";
      cursorColumn = 16;
      lcd.setCursor(16, fila);
      lcd.print(Dato[fila]);
      break;
    case '*':
      delay(1500);
      EEPROM.write(0, Dato);
      lcd.clear();
      lcd.print("Info Guardada");
      delay(2000);
      break;
  }   
}

Probe con los cambios como me dijiste, reemplazando el write por el put y el read por el get pero no funciono, sigue con el mismo problema, aca dejo fotos de lo que me hace!.
Entiendo que put y get guardan en la memoria el array y las funciones "solas" se encargan de gestionar las posiciones que ocupan.
Estos son los datos que tengo que guardar

Y aca el error que aparece luego de darle a guardar

Vaya, yo apunté a otra cosa. Ya me fijo y edito.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.