#include <Servo.h>
Servo meuServo;
// Definição das portas
const int ledVerde = 2;
const int ledAmarelo = 3;
const int ledVermelho = 4;
const int botaoPin = 5;
// Variáveis para controle de tempo
unsigned long tempoAnterior = 0;
const unsigned long tempoAbertura = 5000; // 5 segundos
const unsigned long tempoAmarelo = 2000; // 2 segundos
bool estadoCancela = false; // Estado da cancela (fechada ou aberta)
bool temporizadorAtivo = false;
void setup() {
meuServo.attach(6);
pinMode(ledVerde, OUTPUT);
pinMode(ledAmarelo, OUTPUT);
pinMode(ledVermelho, OUTPUT);
pinMode(botaoPin, INPUT);
// Inicializa a cancela fechada
digitalWrite(ledVermelho, HIGH);
digitalWrite(ledVerde, LOW);
digitalWrite(ledAmarelo, LOW);
meuServo.write(0); // Cancela fechada
}
void loop() {
if (digitalRead(botaoPin) == HIGH && !estadoCancela) {
abrirCancela();
}
if (temporizadorAtivo) {
unsigned long tempoAtual = millis();
// Verifica se é hora de mudar para LED amarelo
if (tempoAtual - tempoAnterior >= tempoAbertura && estadoCancela) {
mudarParaAmarelo();
}
// Verifica se é hora de fechar a cancela
if (tempoAtual - tempoAnterior >= tempoAbertura + tempoAmarelo && estadoCancela) {
fecharCancela();
}
}
}
void abrirCancela() {
digitalWrite(ledVermelho, LOW); // Desliga LED vermelho
digitalWrite(ledVerde, HIGH); // Liga LED verde
meuServo.write(90); // Abre a cancela
tempoAnterior = millis(); // Reseta o temporizador
temporizadorAtivo = true; // Ativa o temporizador
estadoCancela = true; // Define estado como aberto
}
void mudarParaAmarelo() {
digitalWrite(ledVerde, LOW); // Desliga LED verde
digitalWrite(ledAmarelo, HIGH); // Liga LED amarelo
}
void fecharCancela() {
digitalWrite(ledAmarelo, LOW); // Desliga LED amarelo
meuServo.write(0); // Fecha a cancela
digitalWrite(ledVermelho, HIGH); // Liga LED vermelho
temporizadorAtivo = false; // Desativa o temporizador
estadoCancela = false; // Define estado como fechado
}