const int buttonPin = 15; // Pino do botão
const int ledPin = 19; // Pino do LED
volatile bool buttonPressed = false; // Estado do botão
unsigned long lastDebounceTime = 0; // Tempo da última mudança
unsigned long debounceDelay = 50; // Delay para debounce
bool ledState = false; // Estado do LED
int contador = 0;
#define Led_A 23
#define Led_B 22
#define Led_C 21
#define Led_D 4
#define Led_E 18
#define Led_F 5
#define Led_G 17
uint8_t Numeros[10][7]={
{1,1,1,1,1,1,0},
{0,1,1,0,0,0,0},
{1,1,0,1,1,0,1},
{1,1,1,1,0,0,1},
{0,1,1,0,0,1,1},
{1,0,1,1,0,1,1},
{0,0,1,1,1,1,1},
{1,1,1,0,0,0,0},
{1,1,1,1,1,1,1},
{1,1,1,0,0,1,1},
};
void coloca_display(int valor)
{
digitalWrite(Led_A,Numeros[valor][0] );
digitalWrite(Led_B,Numeros[valor][1] );
digitalWrite(Led_C,Numeros[valor][2] );
digitalWrite(Led_D,Numeros[valor][3] );
digitalWrite(Led_E,Numeros[valor][4] );
digitalWrite(Led_F,Numeros[valor][5] );
digitalWrite(Led_G,Numeros[valor][6] );
}
// Função de interrupção
void IRAM_ATTR handleButtonPress() {
unsigned long currentTime = millis();
if (currentTime - lastDebounceTime > debounceDelay) {
buttonPressed = true; // Marca que o botão foi pressionado
lastDebounceTime = currentTime; // Atualiza o tempo da última mudança
}
}
void setup() {
pinMode(ledPin, OUTPUT); // Configura o pino do LED como saída
pinMode(buttonPin, INPUT); // Configura o pino do botão como entrada com pull-up
// Configura a interrupção para o pino do botão
attachInterrupt(digitalPinToInterrupt(buttonPin), handleButtonPress, RISING);
pinMode(Led_A, OUTPUT);
pinMode(Led_B, OUTPUT);
pinMode(Led_C, OUTPUT);
pinMode(Led_D, OUTPUT);
pinMode(Led_E, OUTPUT);
pinMode(Led_F, OUTPUT);
pinMode(Led_G, OUTPUT);
}
void loop() {
if (buttonPressed) {
buttonPressed = false; // Reseta o estado do botão
// Alterna o estado do LED
ledState = !ledState;
digitalWrite(ledPin, ledState ? HIGH : LOW);
contador++;
if (contador > 9) {
contador = 0;
}
// Atualiza o display com o contador
coloca_display(contador);
}
if (digitalRead(buttonPin) == HIGH) {
digitalWrite(ledPin, HIGH); // Acende o LED enquanto o botão está pressionado
} else {
digitalWrite(ledPin, LOW); // Apaga o LED quando o botão não está pressionado
}
}