[DUVIDA] Pushbutton para salvar temporariamente uma variavel

Colegas, boa tarde.

Estou utilizando o sensor LM35 ao Arduino para realizar leituras de temperatura. Porém gostaria de adicionar ao pino 9 um pushbutton de maneira que o código se comporte desta forma:

  • leia a temperatura
  • se pushbutton acionado (guarde o 1º valor da temperatura no momento do acionamento)
  • continue lendo a temperatura
  • se pushbutton acionado (guarde o 2º valor da temperatura no momento do acionamento)
  • continue lendo a temperatura
  • se pushbutton acionado (Mostre a Média entre o valor 1 e o valor 2)

Ou seja a cada 3 acionamentos ele completa o um ciclo.

O grande problema é que não sei como faço para ele guardar este valor de temperatura sem que ele se apague ao entrar no loop.

Lendo a respeito pensei em salvar estes valores na EEPROM mais ainda não sei como fazer, pois são do tipo float.

Quem conseguir me ajudar ficarei mto grato, acho que não deve ser tão complicado aos mais experientes.

Abraços

Estou seguindo, este código. Fonte: http://www.ajudino.com/2013/06.....-lm35.html

const int LM35 = A0; // Pino Analog onde vai ser ligado ao pino 2 do LM35 
const int REFRESH_RATE = 2000;  //Tempo de atualização entre as leituras
const float CELSIUS_BASE = 0.4887585532746823069403714565; //Base de conversão para Graus Celsius ((5/1023) * 100)
int buttonPin = 9; //Define o pino de entrada do botão
int buttonMode = 0; //Variavel para atribuir o estado do botão Ligado ou delisgado


void setup() {   
Serial.begin(9600); 
pinMode(buttonPin, INPUT); //Define o pino como entrada
}  

void loop() { 
Serial.print("Temperatura: ");  
Serial.println(readTemperature());

/* tentei isso mais não consegui

buttonMode = digitalRead(buttonPin); //Leitura do botão HIGH ou LOW
   
   if(buttonMode == LOW) {
     float mean_1 = readTemperature();
   }

   Serial.println(readTemperature()); //Imprime o resultado da função

   if(buttonMode == LOW) {
     float mean_2 = readTemperature();
   }
   
   Serial.println(readTemperature()); //Imprime o resultado da função
  
   if(buttonMode == LOW) {
     float mean_3 = (mean_1 + mean_2) / 2;
     Serial.println(mean_3); //Imprime o resultado da função
   }
*/

 
delay(REFRESH_RATE); 
} 

float readTemperature(){   
return (analogRead(LM35) * CELSIUS_BASE);  
}

Tem varias coisinhas erradas no seu código. Tenta esse e dá uma estudada melhor ;).

const int LM35 = A0; // Pino Analog onde vai ser ligado ao pino 2 do LM35 
const int REFRESH_RATE = 2000;  //Tempo de atualização entre as leituras
const float CELSIUS_BASE = 0.4887585532746823069403714565; //Base de conversão para Graus Celsius ((5/1023) * 100)
int buttonPin = 9; //Define o pino de entrada do botão
int buttonMode = 0; //Variavel para atribuir o estado do botão Ligado ou delisgado

int buttonHasPressed = 0; // Variavel para pegar apenas o primeiro clique
int timesButtonClicked = 0; // Variavel para saber quantas vezes o botao foi apertado

float mean_1 = 0; // Declaracao global, para o valor ser mantido mesmo depois da funcao loop() terminar
float mean_2 = 0; // Declaracao global, para o valor ser mantido mesmo depois da funcao loop() terminar

void setup() {   
Serial.begin(9600); 
pinMode(buttonPin, INPUT_PULLUP); //Define o pino como entrada PULLUP (ligar botao no GND)
pinMode(LM35, INPUT);  // Define o pino analogico do LM35 como entrada
}  

void loop() { 
Serial.print("Temperatura: ");  
Serial.println(readTemperature());

  buttonMode = digitalRead(buttonPin); //Leitura do botão HIGH ou LOW
   
   if((buttonMode == LOW) && (buttonHasPressed == 0) && (timesButtonClicked == 0)) {
   // Se o botao for pressionado, nao foi apertado no ciclo anterior e ainda nao foi clicado no ciclo...
     mean_1 = readTemperature();
     buttonHasPressed = 1;  // O botao foi pressionado
     timesButtonClicked = 1;  // O botao foi clicado uma vez
     Serial.println(readTemperature()); //Imprime o resultado da função
   }

   if((buttonMode == LOW) && (buttonHasPressed == 0) && (timesButtonClicked == 1)) {
   // Se o botao for pressionado, nao foi apertado no ciclo anterior e foi clicado uma vez no ciclo...
     mean_1 = readTemperature();
     buttonHasPressed = 1;  // O botao foi pressionado
     timesButtonClicked = 2;  // O botao foi clicado duas vezes
     Serial.println(readTemperature()); //Imprime o resultado da função
   }

   if((buttonMode == LOW) && (buttonHasPressed == 0) && (timesButtonClicked == 2)) {
   // Se o botao for pressionado, nao foi apertado no ciclo anterior e foi clicado duas vezes no ciclo...
     buttonHasPressed = 1;  // O botao foi pressionado
     timesButtonClicked = 0;  // O botao ja foi clicado 3 vezes. Zerar contador para iniciar proximo ciclo
     float mean_3 = (mean_1 + mean_2) / 2.0f;  // Ja que esta trabalhando com float, coloque todos os numeros como float
     Serial.println(mean_3); //Imprime o resultado da função
   }

   if (buttonMode == HIGH)
   {
   // Se o botao nao foi pressionado...
     buttonHasPressed = 0;  // O botao nao foi pressionado
   }

  delay(REFRESH_RATE); 
} 

float readTemperature(){   
return (analogRead(LM35) * CELSIUS_BASE);  
}