From 64def2a70ec7f876567b4212e7af29a38b5ee93d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniele=20Vigan=C3=B2?= Date: Tue, 2 Jun 2020 00:58:01 +0200 Subject: [PATCH] EEPROM experiments --- arduino/eeprom_get/eeprom_get.ino | 64 +++++++++++++++++++++++++++++++ arduino/eeprom_put/eeprom_put.ino | 53 +++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 arduino/eeprom_get/eeprom_get.ino create mode 100644 arduino/eeprom_put/eeprom_put.ino diff --git a/arduino/eeprom_get/eeprom_get.ino b/arduino/eeprom_get/eeprom_get.ino new file mode 100644 index 0000000..e43abe0 --- /dev/null +++ b/arduino/eeprom_get/eeprom_get.ino @@ -0,0 +1,64 @@ +/*** + eeprom_get example. + + This shows how to use the EEPROM.get() method. + + To pre-set the EEPROM data, run the example sketch eeprom_put. + This sketch will run without it, however, the values shown + will be shown from what ever is already on the EEPROM. + + This may cause the serial object to print out a large string + of garbage if there is no null character inside one of the strings + loaded. + + Written by Christopher Andrews 2015 + Released under MIT licence. +***/ + +#include + +void setup() { + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + readConfig(); //Run the next test. +} + +struct config { + byte mac[6]; + byte remoteAddr[4]; + char serial[4]; + int remotePort; + char name[128]; +}; + +void printAddr(byte addr[], int size, Stream *stream) { + for (int thisByte = 0; thisByte < size; thisByte++) { + // print the value of each byte of the IP address: + stream->print(addr[thisByte], HEX); + if (thisByte < size - 1) { + stream->print("."); + } + } +} + +void readConfig() { + int eeAddress = 0; //Move address to the next byte after float 'f'. + + config customVar; //Variable to store custom object read from EEPROM. + EEPROM.get(eeAddress, customVar); + + Serial.println("Read custom object from EEPROM: "); + printAddr(customVar.mac, sizeof(customVar.mac), &Serial); + Serial.println(); + printAddr(customVar.remoteAddr, sizeof(customVar.remoteAddr), &Serial); + Serial.println(); + Serial.println(customVar.remotePort); + Serial.println(customVar.serial); + Serial.println(customVar.name); +} + +void loop() { + /* Empty loop */ +} diff --git a/arduino/eeprom_put/eeprom_put.ino b/arduino/eeprom_put/eeprom_put.ino new file mode 100644 index 0000000..82b88d6 --- /dev/null +++ b/arduino/eeprom_put/eeprom_put.ino @@ -0,0 +1,53 @@ +/*** + eeprom_put example. + + This shows how to use the EEPROM.put() method. + Also, this sketch will pre-set the EEPROM data for the + example sketch eeprom_get. + + Note, unlike the single byte version EEPROM.write(), + the put method will use update semantics. As in a byte + will only be written to the EEPROM if the data is actually + different. + + Written by Christopher Andrews 2015 + Released under MIT licence. +***/ + +#include + +struct config { + byte mac[6]; + byte remoteAddr[4]; + char serial[4]; + int remotePort; + char name[128]; +}; + +void setup() { + + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + int eeAddress = 0; //Location we want the data to be put. + + /** Put is designed for use with custom structures also. **/ + + //Data to store. + config customVar = { + { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }, + { 192, 168, 10, 123 }, + "abcd", + 80, + "sensor.server.domain" + }; + + EEPROM.put(eeAddress, customVar); + Serial.print("Written custom data type! \n\nView the example sketch eeprom_get to see how you can retrieve the values!"); +} + +void loop() { + /* Empty loop */ +}