Paso 3: Software - EEPROM
Trabajando con la vuelta de la EEPROM a ser más difícil de esperado. El chip AT24C256 tiene 256 Kbit de memoria que es de 32 kilobytes.
Usar el código en el Arduino Playground para I2C EEPROM que son 2 formas de trabajar con la memoria: un byte en un momento o una página de una vez. La pequeña ADVERTENCIA ADVERTENCIA: la dirección es una dirección de página, final de 6-bit envolverá alrededor - que significa que, debido a la estructura física de este chip, escriba operación tiene que hacerse dentro de una sola página, si vas en una sola página la escritura envolverá alrededor al principio de esta página. Usted puede leer todos los detalles y cómo resolver en este post pero he decido trabajar simplemente con un byte a la vez.
Las estructuras de datos que trabajo con en esta aplicación son los siguientes
struct Time{ byte hour; byte minute; byte second; };
struct LocationItem { float lat; float lng; Time time; };
Float es 4 bytes por lo que tengo que escribir 1 byte a la vez y de que escribí la función write_float y read_float.
Estructura del tiempo se compone de 3 bytes, pero he podido de empuje en 2 bytes por limitar la hora de ser sólo 12 horas en vez de 24 (ya que la grabación puede hacerse alrededor de 2,7 horas hay ningún punto en el reloj de 24 horas). Los números de 0-11 requieren 4 bits. Los minutos y segundos son valores de 0-59 que requieren 6 bits juntos 4 + 6 + 6 = 16 bits que es exactamente de 2 bytes. Se pueden ver write_timewrite_time y read_time para la manipulación de bits serializar y deserializar la estructura del tiempo a bits y de nuevo.
El lo único que queda es administrar la lista de los lugares registrados. Para que mantener un int (2 bytes) en la posición 0 de la EEPROM y que int es el número de localidades se registraron hasta ahora. Cada vez que grabamos una nueva ubicación se lee este valor que nos permiten calcular la posición para escribir la nueva ubicación y luego incrementar el número de registros y escribir de nuevo a la posición 0. Mira add_location_item para el código.