#include <Ultrasonic.h>
#define PIN_PIR 11
#define PIN_TRIG 13
#define PIN_ECHO 12
#define PIN_MOSFET 9
#define PIN_BOTAO 5
#define PIN_LED_RED 3
#define PIN_LED_GREEN 2
bool PIR, BOT, BOT_ESTADO;
float DISTANCIA;
bool estadoBotao = false; // Estado do botão (pressionado ou não)
bool estadoAmbiente = false; // Estado do ambiente (ocupado ou desocupado)
Ultrasonic ULTRASONIC(PIN_TRIG, PIN_ECHO);
void setup() {
Serial.begin(9600);
pinMode(PIN_PIR, INPUT);
pinMode(PIN_MOSFET, OUTPUT);
pinMode(PIN_BOTAO, INPUT);
pinMode(PIN_LED_RED, OUTPUT);
pinMode(PIN_LED_GREEN, OUTPUT);
}
void loop() {
DISTANCIA = ULTRASONIC.read();
PIR = digitalRead(PIN_PIR);
BOT = digitalRead(PIN_BOTAO);
BOT_ESTADO = digitalRead(PIN_BOTAO) == HIGH;
BOT_1();
if(PIR){
MOTOR();
}
if(DISTANCIA < 50){
MOTOR();
}
}
void BOT_1() {
if (BOT_ESTADO != estadoBotao) {
estadoBotao = BOT_ESTADO;
if (estadoBotao) {
estadoAmbiente = !estadoAmbiente;
delay(200);
}
}
if (estadoAmbiente) {
digitalWrite(PIN_LED_RED, HIGH);
digitalWrite(PIN_LED_GREEN, LOW);
} else {
digitalWrite(PIN_LED_RED, LOW);
digitalWrite(PIN_LED_GREEN, HIGH);
}
}
void BOT_2() {
if (BOT) {
digitalWrite(PIN_LED_GREEN, HIGH);
digitalWrite(PIN_LED_RED, LOW);
} else {
digitalWrite(PIN_LED_RED, HIGH);
digitalWrite(PIN_LED_GREEN, LOW);
}
}
void MOTOR() {
digitalWrite(PIN_MOSFET, HIGH);
delay(200);
digitalWrite(PIN_MOSFET, LOW);
}
void AJUSTES() {
Serial.print("CM: ");
Serial.println(DISTANCIA);
delay(500);
}