#include <TFT_eSPI.h>
#define pinButton 5
String Estado;
bool valorActual;
bool valorAnterior;
bool Esperando;
unsigned int TiempoPrimerCambio;
int Cuenta;
TFT_eSPI tft = TFT_eSPI();
void setup() {
Serial.begin(115200);
pinMode(pinButton, INPUT);
valorAnterior = digitalRead(pinButton);
valorActual = digitalRead(pinButton);
Esperando = false;
Cuenta = 0;
//Configuración de la pantalla
tft.init();
tft.setRotation(3);
tft.fillScreen(TFT_GREEN);
delay(500);
tft.fillScreen(TFT_BLUE);
delay(500);
tft.setCursor(0, 0);
tft.setTextColor(TFT_WHITE,TFT_BLACK);
tft.setTextSize(1);
tft.print("Cuenta: ");
tft.println(Cuenta);
Serial.println("Configuración completa!");
}
void loop(){
valorActual = digitalRead(pinButton);
if(valorAnterior != valorActual && !Esperando){
//Se verifica que el cambio sea real y no ruido.
//Para esto, un cambio será real si el valor actual se mantiene por cierto tiempo
TiempoPrimerCambio = millis();
Esperando = true;
}
//Se espera 25 ms para el siguiente muestreo de la señal
if(millis() - TiempoPrimerCambio >= 25 && Esperando){
valorActual = digitalRead(pinButton);
if(valorAnterior == HIGH && valorActual == LOW){
//Sí hubo un cambio en la señal y se presionó el botón
Cuenta++;
Serial.print("Nuevo valor: ");
Serial.println(Cuenta);
tft.print("Cuenta: ");
tft.println(Cuenta);
}
//Se actualiza el estado solo cuando se confirmó un cambio
if(valorAnterior != valorActual){
valorAnterior = valorActual;
}
Esperando = false;
}
}
void NiceWithDelay(){
valorActual = digitalRead(pinButton);
if(valorAnterior != valorActual){
//Se trabaja la lógica con valores que ya no cambian
if(valorAnterior == HIGH && valorActual == LOW){
Cuenta++;
Serial.print("Nuevo valor: ");
Serial.println(Cuenta);
tft.print("Cuenta: ");
tft.println(Cuenta);
}
//¿Los valores se debe actualizar al final?
valorAnterior = valorActual;
}
//Se necesita un pequeño delay para evitar el ruido (Adicional al filtro capacitivo)
delay(10);
}
void Counter(){
valorActual = digitalRead(pinButton);
if(valorAnterior != valorActual){
//Se trabaja la lógica con valores que ya no cambian
if(valorAnterior == HIGH && valorActual == LOW){
Cuenta++;
Serial.print("Nuevo valor: ");
Serial.println(Cuenta);
}
//¿Los valores se debe actualizar al final?
valorAnterior = valorActual;
}
}
void ChangeState(){
valorActual = digitalRead(pinButton);
if(valorAnterior != valorActual){
valorAnterior = valorActual;
//Se trabaja la lógica con valores que ya no cambian
Estado = valorActual == HIGH ? "HIGH" : "LOW";
Serial.printf("Cuenta: %s\n",&Estado);
}
}
void MessageText() {
Estado = digitalRead(pinButton) == HIGH ? "HIGH" : "LOW";
Serial.printf("Value: %s\n",&Estado);
delay(500);
}