// Definindo os pinos para os LEDs e o botão
#define led1Pin 12
#define led2Pin 11
#define led3Pin 10
#define buttonPin 0
// Variáveis para armazenar o estado do botão
bool buttonState = false;
bool lastButtonState = false;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
// Variáveis para controlar os LEDs
bool led1On = false;
bool led2On = false;
bool led3On = false;
bool doubleClick = false;
bool clickts = false;
// Variáveis para controlar o tempo
unsigned long anteriorMillis = 0; // Armazena o tempo da última mudança de estado do LED
const long intervalo = 1000; // Intervalo desejado em milissegundos (1 segundo)
// Variável para armazenar o estado do LED
int estadoLED = LOW;
void setup() {
// Inicializa os pinos dos LEDs como saída
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(led3Pin, OUTPUT);
// Inicializa o pino do botão como entrada
pinMode(buttonPin, INPUT);
//Serial.begin(115200);
}
void loop() {
// Lê o estado do botão e faz a detecção de clique duplo
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
//digitalWrite(led1Pin, buttonState ? HIGH : LOW);//reativo
if (buttonState == HIGH) {
digitalWrite(led1Pin, !digitalRead(led1Pin));
//Serial.println("Vermelho!");
}
if (buttonState == HIGH) {
if (doubleClick) {
doubleClick = false;
led2On = !led2On;
digitalWrite(led2Pin, led2On ? HIGH : LOW);
//Serial.println("Amarelo!");
} else {
doubleClick = true;
}
}
}
}
lastButtonState = reading;
// Liga o terceiro LED se o botão estiver pressionado por 3 segundos
if (buttonState == HIGH && millis() - lastDebounceTime > 3000) {
if (clickts){
clickts = false;
led3On = !led3On;
digitalWrite(led3Pin, led3On ? HIGH : LOW);
//Serial.println("Verde!");
lastDebounceTime = millis();
}
else{
clickts = true;
}
}
unsigned long tempoAtual = millis();
// Verifica se passou tempo suficiente para mudar o estado do LED
if (tempoAtual - anteriorMillis >= intervalo) {
// Armazena o novo tempo anterior
anteriorMillis = tempoAtual;
// Inverte o estado do LED
if (estadoLED == LOW) {
estadoLED = HIGH;
} else {
estadoLED = LOW;
}
// Atualiza o estado do LED
digitalWrite(LED_BUILTIN, estadoLED);
}
}