Well crap... I just found the original EEPROMVar.h. It compiles just fine. Now it will store any settings changed through the menu on the chip itself so it doesn't reset if the power goes out.
#include <Arduino.h> //changed from WProgram.h
#include <EEPROM.h>
/*
www.alexanderbrevig.com
AlphaBeta
*/
class EEPROMAddressCounter {
protected:
static int availableAddress;
};
int EEPROMAddressCounter::availableAddress = 0;
template<typename T>
class EEPROMVar :
public EEPROMAddressCounter {
public:
static const byte IS_INITIALIZED = B10101010;
EEPROMVar(T init) {
address = availableAddress;
var = init;
restore();
availableAddress += sizeof(T) + 1; //make room for the is initialized flag
}
operator T () {
return var;
}
EEPROMVar &operator=(T val) {
var = val;
save();
}
void operator++(int) {
var += T(1); //cast for safety
save();
}
void operator--(int) {
var -= T(1); //cast for safety
save();
}
void operator++() {
var += T(1); //cast for safety
save();
}
void operator--() {
var -= T(1); //cast for safety
save();
}
template<typename V>
void operator /= (V divisor) {
var = var / divisor;
save();
}
template<typename V>
void operator *= (V multiplicator) {
var = var * multiplicator;
save();
}
protected:
void save(){
union {
byte raw[ sizeof(T) ];
T data;
} writer;
writer.data = var;
for (byte i=0; i<sizeof(T); i++) {
EEPROM.write(address + 1 + i, writer.raw[i]);
}
}
void restore(){
byte init = EEPROM.read(address);
if (init!=EEPROMVar::IS_INITIALIZED) {
//it was not initialized
EEPROM.write(address,EEPROMVar::IS_INITIALIZED);
union {
byte raw[ sizeof(T) ];
T data;
} writer;
writer.data = var;
for (byte i=0; i<sizeof(T); i++) {
EEPROM.write(address + 1 + i, writer.raw[i]);
}
}
//read from EEPROM
union {
byte raw[ sizeof(T) ];
T data;
} reader;
for (byte i=0; i<sizeof(T); i++) {
reader.raw[i] = EEPROM.read(address + 1 + i);\
}
var = reader.data;
}
T var;
int address;
};