Att hitta Lychee - hund GPS Offline Tracker (3 / 5 steg)
Steg 3: Programvara - EEPROM
Arbetar med EEPROM vänden ut för att vara svårare än jag trodde. AT24C256 chip har 256 Kbit minne som är 32 Kbyte.
Jag använder koden på Arduino Playground för I2C EEPROM som inkluderar 2 sätt att arbeta med minnet: en byte i taget eller en sida en tid. Den har små varning varning: adressen är en sida adress, 6-bitars slutet radbryts runt - som innebär att på grund av den fysiska strukturen i detta chip skriva operation måste göras inuti en enda sida, om du går över en enda sida skriva kommer att linda runt till början av sidan. Du kan läsa alla detaljer och hur man kan lösa det i det här inlägget men jag har väljer att helt enkelt arbeta med ett byte i taget.
Datastrukturerna jag arbetar med i denna app är följande
struct tid
{
byte timme;
byte minut.
byte andra;
};
struct LocationItem
{
float lat;
flyta lng,
Tid tid;
};
float är 4 byte så jag måste skriva 1 byte i taget och för att jag skrev write_float funktion och read_float.
Tid struktur består av 3 byte men jag har lyckas att driva det i 2-byte av begränsa timmen att vara bara 12 timmar istället för 24 (eftersom inspelningen kan göras ca 2,7 timmar det är ingen mening i ta tid på 24 timmar). Siffrorna 0-11 kräver 4 bitar. Minuter och sekunder är 0-59 värden som kräver 6 bitar tillsammans 4 + 6 + 6 = 16 bitar som är exakt 2 byte. Du kan se write_timewrite_time och read_time för lite hantering att serialisera och deserialisera tid struktur till bitar och tillbaka.
Det enda som återstår är hantera listan över inspelade platser. För att jag håller en int (2 byte) på position 0 för EEPROM och det int är antalet platser vi spelade in förrän nu. Varje gång vi spela in en ny plats vi läser detta värde som ger oss möjlighet att beräkna platsen för att skriva den nya platsen och sedan vi öka antalet poster och skriva det tillbaka till läge 0. Titta på add_location_item för koden.