#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int PIRPIN = 8;
int PIRValue = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
int temp;
int TRIG = 2;
int ECHO = 1;
int BUZZER = 3;
int duracion;
int distancia;
Servo myservo;
int pos = 0;
bool ejecutarUltrasonico = false;
bool ejecutarServo = false;
bool ejecutarTemperatura = false;
bool ejecutarPIR = false;
void setup() {
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(BUZZER, OUTPUT);
Serial.begin(9600);
myservo.attach(9);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(A2, INPUT);
pinMode(PIRPIN, INPUT);
lcd.init();
lcd.backlight();
menuPrincipal();
}
void loop() {
if (ejecutarUltrasonico) {
ultrasonico();
}
if (ejecutarServo) {
servoLDR();
}
if (ejecutarTemperatura) {
leerTemperatura();
}
if (ejecutarPIR) {
detectarMovimiento();
}
}
void menuPrincipal() {
Serial.println("Seleccione una opción:");
Serial.println("1. Sensor ultrasónico y zumbador");
Serial.println("2. Servo y LDR");
Serial.println("3. Sensor de temperatura");
Serial.println("4. Sensor de movimiento PIR");
Serial.println("5. Apagar programa");
while (Serial.available() == 0); // Esperar a que el usuario ingrese una opción
int opcion = Serial.parseInt();
switch (opcion) {
case 1:
ejecutarUltrasonico = true;
ejecutarServo = false;
ejecutarTemperatura = false;
ejecutarPIR = false;
break;
case 2:
ejecutarUltrasonico = false;
ejecutarServo = true;
ejecutarTemperatura = false;
ejecutarPIR = false;
break;
case 3:
ejecutarUltrasonico = false;
ejecutarServo = false;
ejecutarTemperatura = true;
ejecutarPIR = false;
break;
case 4:
ejecutarUltrasonico = false;
ejecutarServo = false;
ejecutarTemperatura = false;
ejecutarPIR = true;
break;
case 5:
ejecutarUltrasonico = false;
ejecutarServo = false;
ejecutarTemperatura = false;
ejecutarPIR = false;
break;
default:
Serial.println("Opción inválida");
break;
}
}
void ultrasonico() {
digitalWrite(TRIG, HIGH);
delayMicroseconds(1);
digitalWrite(TRIG, LOW);
delayMicroseconds(1);
duracion = pulseIn(ECHO, HIGH);
distancia = duracion / 58.2;
if (distancia < 15) {
digitalWrite(BUZZER, HIGH);
} else {
digitalWrite(BUZZER, LOW);
}
}
void servoLDR() {
int ldr = analogRead(A0);
pos = (1023 - ldr) / 4;
Serial.println(pos);
myservo.write(pos);
delay(15);
}
void leerTemperatura() {
temp = analogRead(A2);
Serial.println(temp);
delay(200);
if (temp > 500) {
Serial.println("Temperatura ambiente");
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
} else {
Serial.println("Temperatura ALTA!!");
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
delay(50);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
delay(50);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
delay(50);
}
}
void detectarMovimiento() {
PIRValue = digitalRead(PIRPIN);
if (PIRValue == HIGH) {
lcd.print("MOVIMIENTO DETECTADO!!!");
delay(500);
lcd.clear();
}
if (PIRValue == LOW) {
lcd.print("NO HAY MOVIMIENTO");
delay(500);
lcd.clear();
}
delay(100);
}