# Inclusão de EEPROM em projeto

**URL:** <https://forum.fazedores.com/t/inclusao-de-eeprom-em-projeto/7001>\
**Category:** Sem Categoria\
**Created:** [Dezembro 27, 2019, 7:48pm UTC](https://forum.fazedores.com/t/inclusao-de-eeprom-em-projeto/7001 "2019-12-27T19:48:02Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![leolisboa28](https://avatars.discourse-cdn.com/v4/letter/l/c67d28/32.png) [@leolisboa28](https://forum.fazedores.com/u/leolisboa28)\
**Post date:** [Dezembro 27, 2019, 7:48pm UTC](https://forum.fazedores.com/t/inclusao-de-eeprom-em-projeto/7001/1 "2019-12-27T19:48:02Z")

</div>

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;

```

}  
}

---

<div class="post-metadata">

**Author:** ![maxdesa](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/maxdesa/32/2110_2.png) [@maxdesa](https://forum.fazedores.com/u/maxdesa)\
**Post date:** [Dezembro 29, 2019, 3:14am UTC](https://forum.fazedores.com/t/inclusao-de-eeprom-em-projeto/7001/2 "2019-12-29T03:14:43Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![leolisboa28](https://avatars.discourse-cdn.com/v4/letter/l/c67d28/32.png) [@leolisboa28](https://forum.fazedores.com/u/leolisboa28)\
**Post date:** [Dezembro 29, 2019, 4:57am UTC](https://forum.fazedores.com/t/inclusao-de-eeprom-em-projeto/7001/3 "2019-12-29T04:57:56Z")

</div>

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 ?

---

<div class="post-metadata">

**Author:** ![maxdesa](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.fazedores.com/maxdesa/32/2110_2.png) [@maxdesa](https://forum.fazedores.com/u/maxdesa)\
**Post date:** [Dezembro 30, 2019, 12:05am UTC](https://forum.fazedores.com/t/inclusao-de-eeprom-em-projeto/7001/4 "2019-12-30T00:05:08Z")

</div>

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](http://www.atmel.com/Images/doc2525.pdf).
> 
> A programação do microcontrolador também pode ser feita através do conector ICSP (in - circuit serial programming) utilzando um [programador](http://www.atmel.com/tools/AVRJTAGICEMKII.aspx) ATMEL.

Fonte: [https://www.embarcados.com.br/arduino-uno/](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](https://forum.arduino.cc/index.php?topic=372834.0)  
[http://labdegaragem.com/forum/topics/arduino-perde-programa-o-ap-s-deligado-da-energia](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/](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
