Por favor, coloque seus códigos dentro de tags [ code][ /code] para facilitar a leitura e cópia.
Acho que faltou uma explicação de como funciona o método EEPROM.get().
Aceita dois argumentos, o primeiro é a posição e o segundo é a variável.
Note que essa função retorna a própria variável do segundo argumento.
Toda vez que você chama esse método, o valor da variável é SUBSTITUÍDO pelo que está na EEPROM.
Portanto, nesta linha:
lcd.print(EEPROM.get(pqp,a));
Você está sempre carregando o valor antigo, descartando as mudanças feitas em linhas anteriores.
Tem duas soluções, salvar a variável toda vez que modifica-la ou usar o método de forma diferente.
Na primeira opção, que não é seu caso, pois quer apenas quando desligar, a EEPROM seria gasta muito mais rápida pois seriam gravadas muitas vezes durante a execução do código.
Na segunda opção, coloque o método EEPROM.get() apenas no setup(). O problema desta segunda opção é que se a energia pode cair a qualquer hora, e você só salva quando desliga, então perderia pulsos.
A escolha é sua. Lembre-se que a EEPROM é caracterizada com 100.000 gravações, então avalie.
Modificando seu código de acordo com a primeira opção:
#include <EEPROM.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
unsigned long a = 0;
const int pqp = 0;
void setup()
{
lcd.begin(20, 4);
}
void loop()
{
int x = analogRead (0);
if (x >= 500 && x <= 530) // verifica se reset foi pressionado
{
// e limpa a memória
}
if (x >= 800 && x <= 830) // de pedal for pressionado
{
a ++; // incrementa quantidadePulsos
EEPROM.put(pqp, a); // <----- LINHA ADICIONADA
lcd.setCursor(0, 0);
lcd.print("a :");
lcd.setCursor(5, 0);
lcd.print(a);
}
if (x >= 300 && x <= 400) // se desliga for pressionado
{
delay(200);
// EEPROM.put(pqp, a); // grava na memória o valor de "a" <----- NÃO PRECISA MAIS DESSA LINHA
}
/*************imprimi o valor contido na memória******************************/
lcd.setCursor(0, 2);
lcd.print("memoria:");
lcd.setCursor(9, 2);
lcd.print(EEPROM.get(pqp,a));
}
Já com a segunda opção:
#include <EEPROM.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
unsigned long a = 0;
const int pqp = 0;
void setup()
{
lcd.begin(20, 4);
EEPROM.get(pqp,a); <----- LINHA ADICIONADA
}
void loop()
{
int x = analogRead (0);
if (x >= 500 && x <= 530) // verifica se reset foi pressionado
{
// e limpa a memória
}
if (x >= 800 && x <= 830) // de pedal for pressionado
{
a ++; // incrementa quantidadePulsos
lcd.setCursor(0, 0);
lcd.print("a :");
lcd.setCursor(5, 0);
lcd.print(a);
}
if (x >= 300 && x <= 400) // se desliga for pressionado
{
delay(200);
EEPROM.put(pqp, a); // grava na memória o valor de "a"
}
/*************imprimi o valor contido na memória******************************/
lcd.setCursor(0, 2);
lcd.print("memoria:");
lcd.setCursor(9, 2);
lcd.print(a); // <----- LINHA MODIFICADA
}
Veja as setas de observação que coloquei nos códigos.
Entenda e traga as dúvidas.
PS.: "pqp" é um nome estranho