#include <EEPROM.h>
byte items_counter = 0;
byte reg_size = 16;
int lookup_table_ini_pos = EEPROM.length() - 256;
String noid_id = "0000000";
/*struct String {
String id = "xxxxxxx";
String name = "xxxxxxxxx";
};*/
String teste = "lu";
int i = 1; // tmp
void setup() {
Serial.begin(9600);
// put your setup code here, to run once:
for (int i = 0 ; i < EEPROM.length() ; i++) EEPROM.write(i, 0);
//for (int i = 0 ; i < 255 ; i++) EEPROM.write(i, 0);
while (!Serial);
// set up lookup table of addresses
for (int i = 1; i <= 256; i++)
if (i <= 16)
EEPROM.write( (EEPROM.length() - i) , 1);
else {
EEPROM.write( (EEPROM.length() - i) , 0);
Serial.println((EEPROM.length() - i));
}
}
bool update_item_counter(int i) {
if (items_counter == 0 && i < 0) {
Serial.println("memory is already empty");
return false;
}
if (items_counter == 240 && i > 0) {
Serial.println("full memory!");
return false;
}
items_counter += i;
return true;
}
bool add_reg_to_mem(char r[]) {
Serial.println(r);
if (update_item_counter(1)) {
EEPROM.put(reg_size * (items_counter - 1), r);
EEPROM.write(lookup_table_ini_pos + items_counter - 1, 1);
return true;
}
else false;
}
int find_reg_pos(char r[]) {
for (int i = 0; i <= 240; i++) {
int pos = lookup_table_ini_pos + i;
byte pos_value = EEPROM.read(pos);
if (pos_value == byte(1)) {
String aux;
EEPROM.get(i * reg_size, aux);
if (aux == r)
return i * reg_size;
}
}
return -1;
}
/*
bool del_reg_from_mem(String r) {
int reg_pos = find_reg_pos(r);
r = "0000000000000000";
if (reg_pos != -1 && update_item_counter(-1)) {
EEPROM.put(reg_pos, r);
return true;
} else return false;
}
*/
// valores salvos serao do tipo: XXX.XXX.X.1.2.3.4.5.6.7.8.9
void loop() {
// put your main code here, to run repeatedly:
if (i == 1) {
Serial.println("projeto bomba atomica");
char r[16] = "xxxyyyzluizpaulo";
if (add_reg_to_mem(r))
Serial.println("inserido");
Serial.println(r);
Serial.println("pos: ");
//int reg_pos = find_reg_pos(r);
int reg_pos = 0;
Serial.println(reg_pos);
char z[16] = "";
//Serial.println(z);
Serial.println(EEPROM.get(0, z));
//Serial.println(EEPROM.read(3840));
/*for (int i = 0; i < 16; i++) {
Serial.println(EEPROM.read(i));
}*/
i = 2; return;
}
}
String read_name(int n) {
String name = "";
while (name.length() < 9) {
if(Serial.available()){
char data_in = Serial.read();
name += (data_in);
Serial.println(data_in);
}
}
Serial.flush();
return name;
}