/* Tarea 5.1. Control de un relé con LDR, pulsador y ordenador
Autor: Salvador Castellano Hernández 20/10/2024
https://wokwi.com/projects/412281571233120257
Alimentamos el módulo LDR con 3.3 V dado que la entrada analógica soporta una máximo de 3.3V
*/
// Declaramos el pin al que estará conectado el pulsador,relé y LDR
int relayPin = 19;
int pulsadorPin = 32;
int ldrPin = 34;
// Declaramos variables
boolean pulsaValor, Estado = 0, pp = 0; // "pp" es variable que indica prioridad al pulsador
int ldrValor = 0;
String texto = "";
void setup()
{
//Determinamos el pin del pulsador y la entrada analógica del LDR como entradas
pinMode(pulsadorPin, INPUT_PULLDOWN);
pinMode(ldrPin, INPUT);
//Determinamos el pin del relé como salida
pinMode(relayPin, OUTPUT);
// Iniciamos puerto serie
Serial.begin(115200);
}
void loop()
{
//Si la señal del pulsador es activa encendemos el led
pulsaValor =digitalRead(pulsadorPin);
delay(10);
//Leo el estado del ldrValor de forma analógica y envio el valor por puerto serie
ldrValor = analogRead(ldrPin);
delay(10);
//Si hay datos por el puerto serie lo leemos y lo guradamos
//en la variable "texto" tipo string
if (Serial.available() > 0) {
//Serial.print("Escribir por teclado 1 para activar el Relé y 0 para desactivar el Relé : ");
texto = Serial.readStringUntil('\n');
Serial.println(" "+texto);
if (texto == "1") {
if (Estado == 0) {
pulsaValor = HIGH;
}
}
else if (texto == "0") {
if (Estado == 1) {
pulsaValor = HIGH;
}
}
else {
Serial.println("ERROR Escribir por teclado 1 para activar el Relé y 0 para desactivar el Relé : ");
}
}
Serial.println("--");
lecturaEstado();
if (pulsaValor) {
delay(5);
Estado = !Estado;
pp = HIGH;
digitalWrite(relayPin, Estado);
delay(5);
}
if (ldrValor >= 3400) {
if (!pp) {
encenderRelay();
}
}
if (ldrValor < 2400) {
if (pp) {
if (Estado == 0) {
pp = 0;
}
}
else {
apagarRelay();
pp = 0;
}
}
delay(500);
}
// Declaracion de funciones
void encenderRelay() {
digitalWrite(relayPin, HIGH);
delay(10);
Estado = 1;
}
void apagarRelay() {
digitalWrite(relayPin, LOW);
delay(10);
Estado = 0;
}
void lecturaEstado() {
// Serial.print("Lectura pp: ");
// Serial.print(pp);
// Serial.print(" Lectura pulsador: ");
// Serial.print(pulsaValor);
Serial.print("Relé: ");
Serial.print(Estado);
Serial.print(" LDR: ");
Serial.print(ldrValor);
Serial.print(" Escribir 1 para activar el Relé y 0 para desactivar el Relé : ");
delay(10);
}