#include <Ultrasonic.h>
#define PIN_TRIG_EXT 13
#define PIN_ECHO_EXT 12
#define PIN_TRIG_INT 6
#define PIN_ECHO_INT 5
#define PIN_MOTOR_HOR 10
#define PIN_MOTOR_ANT 11
Ultrasonic SENSOR_EXT(PIN_TRIG_EXT, PIN_ECHO_EXT);
Ultrasonic SENSOR_INT(PIN_TRIG_INT, PIN_ECHO_INT);
bool APERTADO, ACESSO = true;
float DISTANCIA_EXT, DISTANCia_INT;
const int botaoPin = 4; // Pino digital onde o botão está conectado
const int ledPin = 9; // Pino digital onde o LED está conectado
const int ledPin2 = 8;
enum Estado { DESLIGADO, LIGADO }; // Definição dos estados
Estado estadoAtual = DESLIGADO; // Estado inicial (LED apagado)
unsigned long tempoDebounce = 200; // Tempo para debouncing (em milissegundos)
unsigned long tempoUltimaLeitura = 0; // Armazena o tempo da última leitura do botão
bool botaoAnterior = HIGH; // Estado anterior do botão
bool botaoAtual = HIGH; // Estado atual do botão
void setup() {
pinMode(botaoPin, INPUT_PULLUP); // Configura o pino do botão com pull-up interno
pinMode(ledPin, OUTPUT); // Configura o pino do LED como saída
pinMode(ledPin2, OUTPUT);
pinMode(PIN_MOTOR_HOR, OUTPUT);
digitalWrite(ledPin, LOW); // Garante que o LED começa apagado
}
void loop() {
unsigned long tempoAtual = millis(); // Tempo atual para controle de debounce
botaoAtual = digitalRead(botaoPin); // Lê o estado atual do botão
// Verifica se houve uma mudança no estado do botão
if (botaoAtual == LOW && botaoAnterior == HIGH && (tempoAtual - tempoUltimaLeitura) > tempoDebounce) {
// Alterar o estado do LED
if (estadoAtual == DESLIGADO) {
estadoAtual = LIGADO;
digitalWrite(ledPin, LOW); // Acende o LED
digitalWrite(ledPin2, HIGH); // Acende o LED
ACESSO == true;
} else {
estadoAtual = DESLIGADO;
digitalWrite(ledPin2, LOW); // Apaga o LED
digitalWrite(ledPin, HIGH); // Acende o LED
ACESSO == false;
}
tempoUltimaLeitura = tempoAtual; // Atualiza o tempo da última leitura
}
botaoAnterior = botaoAtual; // Atualiza o estado anterior do botão
DISTANCIA_EXT = SENSOR_EXT.read();
DISTANCia_INT = SENSOR_INT.read();
if ((DISTANCIA_EXT > 100) && ACESSO == true){
digitalWrite(PIN_MOTOR_HOR, HIGH);
}else{
digitalWrite(PIN_MOTOR_HOR, LOW);
}
if ((DISTANCia_INT > 100) && ACESSO == true){
digitalWrite(PIN_MOTOR_ANT, HIGH);
}else{
digitalWrite(PIN_MOTOR_ANT, LOW);
}
}
SENSOR INTERNO
SENSOR EXTERNO
SENTIDO
ANTI-HORÁRIO
SENTIDO
HORÁRIO
MOTORES
FECHANDO A PORTA
ABRINDO A PORTA |