// Definição dos pinos
const int pinLed = 2; // Pino para o LED
const int pinBotao = 15; // Pino para o botão
const int pinRele = 13; // Pino para o relé
// Variáveis de controle
bool estadoLed = false; // Estado do LED (ligado/desligado)
bool ultimoEstadoBotao = HIGH; // Estado anterior do botão
unsigned long tempoBotao = 0; // Tempo para debouncing do botão
const unsigned long debounceDelay = 50; // Atraso para debouncing (50ms)
void setup() {
// Inicializa os pinos
pinMode(pinLed, OUTPUT);
pinMode(pinBotao, INPUT_PULLUP); // Botão com pull-up interno
pinMode(pinRele, OUTPUT);
// Inicializa o estado do relé
digitalWrite(pinRele, LOW); // Relé desligado no início
}
void loop() {
// Lê o estado do botão com debouncing
int leituraBotao = digitalRead(pinBotao);
// Verifica se o botão foi pressionado (transição de HIGH para LOW)
if (leituraBotao == LOW && ultimoEstadoBotao == HIGH && (millis() - tempoBotao) > debounceDelay) {
// Inverte o estado do LED
estadoLed = !estadoLed;
// Aciona ou desliga o relé conforme o estado do LED
if (estadoLed) {
digitalWrite(pinLed, HIGH); // Liga o LED
digitalWrite(pinRele, HIGH); // Liga o relé
} else {
digitalWrite(pinLed, LOW); // Desliga o LED
digitalWrite(pinRele, LOW); // Desliga o relé
}
// Atualiza o tempo do último pressionamento do botão
tempoBotao = millis();
}
// Atualiza o estado anterior do botão
ultimoEstadoBotao = leituraBotao;
}