Inclusão de EEPROM em projeto

Boa tarde pessoal!
Estou com um projeto pronto e funcionando de sistema de abertura de portão por impressão digital. Porém não consegui utilizar o EEPROM para guardar o programa inteiro na placa caso a energia do Arduino acabe! Podem me ajudar ?
Segue abaixo o código

// INCLUSÃO DAS BIBLIOTECAS
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
#include <PushButton.h>

// DEFINIÇÃO DO PINO DO BOTÃO
#define pinBot 11

// DEFINIÇÃO DO PINO DA TRAVA
#define pinTrava 4

// INSTANCIANDO OBJETOS
SoftwareSerial mySerial(7, 8);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
PushButton botao(pinBot);

// DECLARAÇÃO DAS VARIÁVEIS E FUNCOES
uint8_t numID = 1;
bool gravar=false;

uint8_t modoGravacaoID(uint8_t IDgravar);

void setup() {
pinMode(pinTrava, OUTPUT);
digitalWrite(pinTrava, HIGH);

Serial.begin(9600);
finger.begin(57600);

if(finger.verifyPassword()){
Serial.println(“Sensor biometrico encontrado!”);
} else {
Serial.println(“Sensor biometrico não encontrado! Verifique a conexão e reinicie o sistema”);
while(true) {
delay(1);
}
}

Serial.println(“Fim do Setup!”);
}

void loop() {
botao.button_loop();

if ( botao.pressed() ){
gravar = true;
}

if(gravar){
modoGravacaoID(0);
gravar = false;
}

getFingerprintIDez();

}

uint8_t modoGravacaoID(uint8_t IDgravar) {

int p = -1;
Serial.print(“Esperando uma leitura válida para gravar #”); Serial.println(IDgravar);
delay(2000);
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch § {
case FINGERPRINT_OK:
Serial.println(“Leitura concluída”);
break;
case FINGERPRINT_NOFINGER:
Serial.println(".");
delay(200);
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println(“Erro comunicação”);
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println(“Erro de leitura”);
break;
default:
Serial.println(“Erro desconhecido”);
break;
}
}

// OK successo!

p = finger.image2Tz(1);
switch § {
case FINGERPRINT_OK:
Serial.println(“Leitura convertida”);
break;
case FINGERPRINT_IMAGEMESS:
Serial.println(“Leitura suja”);
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println(“Erro de comunicação”);
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println(“Não foi possível encontrar propriedade da digital”);
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println(“Não foi possível encontrar propriedade da digital”);
return p;
default:
Serial.println(“Erro desconhecido”);
return p;
}

Serial.println(“Remova o dedo”);
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {
p = finger.getImage();
}
Serial.print(“ID “); Serial.println(IDgravar);
p = -1;
Serial.println(“Coloque o Mesmo dedo novamente”);
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch § {
case FINGERPRINT_OK:
Serial.println(“Leitura concluída”);
break;
case FINGERPRINT_NOFINGER:
Serial.print(”.”);
delay(200);
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println(“Erro de comunicação”);
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println(“Erro de Leitura”);
break;
default:
Serial.println(“Erro desconhecido”);
break;
}
}

// OK successo!

p = finger.image2Tz(2);
switch § {
case FINGERPRINT_OK:
Serial.println(“Leitura convertida”);
break;
case FINGERPRINT_IMAGEMESS:
Serial.println(“Leitura suja”);
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println(“Erro de comunicação”);
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println(“Não foi possível encontrar as propriedades da digital”);
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println(“Não foi possível encontrar as propriedades da digital”);
return p;
default:
Serial.println(“Erro desconhecido”);
return p;
}

// OK convertido!
Serial.print(“Criando modelo para #”); Serial.println(IDgravar);

p = finger.createModel();
if (p == FINGERPRINT_OK) {
Serial.println(“As digitais batem!”);
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println(“Erro de comunicação”);
return p;
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
Serial.println(“As digitais não batem”);
return p;
} else {
Serial.println(“Erro desconhecido”);
return p;
}

Serial.print("ID "); Serial.println(IDgravar);
p = finger.storeModel(IDgravar);
if (p == FINGERPRINT_OK) {
Serial.println(“Armazenado!”);
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println(“Erro de comunicação”);
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println(“Não foi possível gravar neste local da memória”);
return p;
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println(“Erro durante escrita na memória flash”);
return p;
} else {
Serial.println(“Erro desconhecido”);
return p;
}
}

int getFingerprintIDez() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return -1;

p = finger.image2Tz();
if (p != FINGERPRINT_OK) return -1;

p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return -1;

//Encontrou uma digital!
if (finger.fingerID == 0) {
Serial.print(“Modo Administrador!”);

 numID++;
 modoGravacaoID(numID);
 return 0; 

} else {

 digitalWrite(pinTrava, LOW);
 Serial.print("ID encontrado #"); Serial.print(finger.fingerID); 
 Serial.print(" com confiança de "); Serial.println(finger.confidence);
 delay(500);
 digitalWrite(pinTrava, HIGH);
 return finger.fingerID;

}
}

Falai @leolisboa28 da mais detalhes desse seu projeto porque sua mensagem ta mais desesperada do que qualquer outra coisa. Por favor descreva como esta o projeto e como ele deveria ser. Para os demais colegas do forum poderem ajudar, voce precisa ser mais claro e detalhado em seu pedido de ajuda.
No aguardo
Att
Max

Opa! Tudo bem max! Vamos lá…
Hoje tenho em minha casa um portal com fechadura elétrica que pode ser aberta por botão. Tenho um Arduino uno, um sensor de impressão digital e um relê para acionamento da fechadura! Esse código que mandei, já está funcionando para abrir a fechadura! Porém, eu carrego o código no Arduino e ele funciona até que eu desligue ele ou reinicie! Após isso ele perde o programa pois não está configurado para salvar na memória… no caso a EEPROM… preciso que o programa fique gravado nela, assim, mesmo que o Arduino desligue ou reinicie, não perderá o programa! Compreende ?

Falai @leolisboa28 cara acredito que seu arduino esteja com algum problema no bootloader ou algo semelhante, pois um caracteristica do arduino eh so limpar a EEPROM depois que voce faz o upload de um novo projeto.
Veja só:

Programação da placa Arduino UNO

A placa Arduino UNO é programada através da comunicação serial, pois o microcontrolador vem programado com o bootloader. Dessa forma não há a necessidade de um programador para fazer a gravação (ou upload) do binário na placa. A comunicação é feita através do protocolo STK500.

A programação do microcontrolador também pode ser feita através do conector ICSP (in - circuit serial programming) utilzando um programador ATMEL.

Fonte: https://www.embarcados.com.br/arduino-uno/

Vi em outros foruns outras pessoas aparentemente com o mesmo problema:
https://forum.arduino.cc/index.php?topic=372834.0
http://labdegaragem.com/forum/topics/arduino-perde-programa-o-ap-s-deligado-da-energia

Nesse aqui achei uma forma de salvar algum dado na EEPROM achei interessante segue ai:
https://www.arduinoecia.com.br/gravar-dados-memoria-eeprom-arduino/

Vou continuar pesquisando e tento retornar com alguma sugestao, com essas fontes espero que nosso colegas tambem possam colaborar.
Abraço
Max