/* EXAMEN
09 DE MAYO DE 2025
GRUPO A */
// Sensor de temperatura
#include <OneWire.h>
#include <DallasTemperature.h>
#define Pin 2
OneWire ourWire(Pin);
DallasTemperature sensors(&ourWire);
int TempC;
//Boton
#define B1 3
#define B2 4
#define B3 7
#define B4 8
#define B5 12
#define B6 13
// Pines
#define LedR 9
#define LedB 10
#define LedV 11
// Sensor ultrasonico
#define Pindisparo 6 //Quien va a enviar la señal
#define Pineco 5 // Quien va a recibir la señal
long tiempoMs; // Variable de tiempo em microsegundos, estipo long por que permite un rango grande de valores, por que un segundo equivale a un millon de microsegundos
int dist; //Variable de la distancia
int parpadeo = 0;
void setup() {
Serial.begin(9600);
// Sensor de temperatura
delay(1000);
sensors.begin();
//sensor ultrasonico
pinMode(Pindisparo, OUTPUT);
pinMode(Pineco, INPUT);
//Boton
pinMode(B1, INPUT);
pinMode(B2, INPUT);
pinMode(B3, INPUT);
pinMode(B4, INPUT);
pinMode(B5, INPUT);
pinMode(B6, INPUT);
}
void loop() {
// Sensor de temperatura
sensors.requestTemperatures();
TempC = sensors.getTempCByIndex(0); //Guarda el valor en grados centigrados
//PARA EL SENSOR ULTRASONICO
iniciarDisparo(); //Funcion que nosotros declaramos que envia la señal
tiempoMs = pulseIn(Pineco, HIGH); //Determinar el tiempo que le toma a la señal en ir y regresar
dist = tiempoMs * 0.01715; // Factor para calcular la distancia en centimetros
Serial.print("temperatura: ");
Serial.print(TempC);
Serial.print(" | distancia: ");
Serial.println(dist);
//ESTADO 1
if (TempC <= 21 && dist >= 15 && dist <= 95) {
for (int x = 0; x < 256; x += 5) {
analogWrite(LedB, x);
delay(150);
}
while (digitalRead(B1) != 1) {
delay(10);
}
for (int x = 255; x > -1; x -= 5) {
analogWrite(LedB, x);
delay(50);
}
}
// ESTADO 2
else if (TempC <= 21 && dist >= 96 && dist <= 255) {
while (digitalRead(B2) != HIGH) {
if (parpadeo <= 50) {
for (int x = 0; x < 256 && digitalRead(B2) != HIGH; x += 5) {
analogWrite(LedB, x);
delay(50);
}
for (int x = 255; x >= 0 && digitalRead(B2) != HIGH; x -= 5) {
analogWrite(LedB, x);
delay(50);
}
parpadeo++;
}
delay(10);
}
while (digitalRead(B2) !=HIGH) {
delay(10);
}
}
// ESTADO 3
else if (TempC >= 22 && TempC <= 30 && dist >= 15 && dist <= 95) {
for (int x = 0; x < 256; x += 5) {
analogWrite(LedV, x);
delay(150);
}
while (digitalRead(B3) != 1) {
delay(10);
}
for (int x = 255; x > -1; x -= 5) {
analogWrite(LedV, x);
delay(50);
}
}
// ESTADO 4
else if (TempC >= 22 && TempC <= 30 && dist >= 96 && dist <= 255) {
parpadeo = 0;
while (digitalRead(B4) != HIGH) {
if (parpadeo < 45) {
for (int x = 0; x < 256 && digitalRead(B4) != HIGH; x += 5) {
analogWrite(LedV, x);
delay(50);
}
for (int x = 255; x >= 0 && digitalRead(B4) != HIGH; x -= 5) {
analogWrite(LedV, x);
delay(50);
}
parpadeo++;
}
while (digitalRead(B4) != HIGH) {
delay(10);
}
}
}
// ESTADO 5
else if (TempC >= 31 && dist >= 15 && dist <= 95) {
for (int x = 0; x < 256; x += 5) {
analogWrite(LedR, x);
delay(250);
}
while (digitalRead(B5) != 1) {
delay(100);
}
for (int x = 255; x > -1; x -= 5) {
analogWrite(LedR, x);
delay(50);
}
}
// ESTADO 6
else if (TempC >= 31 && dist >= 96 && dist <= 255) {
parpadeo = 0;
while (digitalRead(B6) != HIGH) {
if (parpadeo <= 55) {
for (int x = 0; x < 256 && digitalRead(B6) != HIGH; x += 5) {
analogWrite(LedR, x);
delay(50);
}
for (int x = 255; x >= 0 && digitalRead(B6) != HIGH; x -= 5) {
analogWrite(LedR, x);
delay(50);
}
parpadeo++;
}
// Si ya terminó de parpadear y el botón aún no se ha presionado
while (digitalRead(B6) != HIGH) {
delay(10);
}
}
}else{}
}
void iniciarDisparo() {
digitalWrite(Pindisparo, LOW);
delayMicroseconds(2);
digitalWrite(Pindisparo, HIGH); //Manda la señal durante 10 microsegundos y despues lo apaga
delayMicroseconds(10); //Se usan por 10 microsegundos por que hay algo que ya esta predeterminado
digitalWrite(Pindisparo, LOW);
}Loading
ds18b20
ds18b20
B1
B2
B3
B4
B5
B6