Buenos días a todos, Soy David, y nuevo en el foro y todo.
Estoy realizando un proyecto con un un ESP-WROOM-32 para que controle 4 motores de 12V mediante L298N vía WEB o a posteriori BLUETHOOT..., para ello he usado dos multiplexores 74HC595, el primero para controlar los pines n1-4 de cada L298N, y un segundo en cascada para 8 leds que se enciendan o apaguen si las compuertas que mueven los motores están abiertas o cerradas.... Éstos multiplexores están conectados a los pines: STCP o RCLK (12) al 21, SHCP o SRCL(11) al 22 y DS o SER(14) al 23 del ESP-WROOM-32, y mi pregunta es: ¿Qué pines puedo usar para añadir el CD74HC4067 para los botones del control manual? o reorganizar el conexionado, he provado con const int muxSIG = 34;
S0 = 16; S1 = 17; S2 = 18 y S3 = 19 y no he conseguido nada a parte de que se queden encendidos todos los leds (la prueba de los motores la efectúo con leds en vez de los Drivers de los motores).
Gracias por todo.
Adjunto imagen del esquema en dearrollo, me falta por colocar los interruptores y el código, perdonad pues soy un poco torpe y es la forma que tengo de organizarme...
// Comprueba la placa seleccionada
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#elif defined(ESP32) // Comprueba si la placa seleccionada es ESP32
#include <WiFi.h>
#else
#error "Placa no compatible"
#endif
const char* ssid = "Mi_SSID";
const char* password = "Mi_contraseña@";
IPAddress local_IP(192, 168, 1, 200);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress primaryDNS(8, 8, 8, 8); //opcional
IPAddress secondaryDNS(8, 8, 4, 4); //opcional
// Definimos variable general sumatoria:
int salida_multiplexor_01;
int salida_multiplexor_02;
// Definimos las salidas de los multiplexores:
// Multiplexor 1
int r1a = 1; // salida 1
int r1c = 2; // salida 2
int r2a = 4; // salida 3
int r2c = 8; // salida 4
int r3a = 16; // salida 5
int r3c = 32; // salida 6
int r4a = 64; // salida 7
int r4c = 128; // salida 8
// Multiplexor 2
int lc1 = 1; // salida 1
int lc2 = 2; // salida 2
int lc3 = 4; // salida 3
int lc4 = 8; // salida 4
int lc5 = 16; // salida 5
int lc6 = 32; // salida 6
int lc7 = 64; // salida 7
int lc8 = 128; // salida 8
int latchPin = 21; //STCP o RCLK pin 12 del multiplexor 74HC595. 21
int clockPin = 22; //SHCP o SRCLK pin 11 del multiplexor 74HC595. 22
int dataPin = 23; //DS o SER pin 14 del multiplexor 74HC595. 23
//int outputEnablePin = 3; // PWM del esp al OE pin 13 del multiplexor 74HC595.
WiFiServer server(80); // Port 80
//definimos los estados para control.
String estadoR1 = "OFF";
String estadoR2 = "OFF";
String estadoR3 = "OFF";
String estadoR4 = "OFF";
//String estado = "";
bool rejilla1Abierta = false;
bool rejilla2Abierta = false;
bool rejilla3Abierta = false;
bool rejilla4Abierta = false;
// Definimos los tiempos de Apertura y cierre.
int tiempoApertura = 1000; // Tiempo para Abrir.
int tiempoCierre = 1000; // Tiempo para Cerrar.
// Tiempo para volver a conectarse cuando se pierde la conexión.
int wait30 = 30000;
void setup() {
// Definimos estado pines del 74HC595 como OUTPUT.
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
//pinMode(outputEnablePin, OUTPUT);
// Definimos estado pines del 74HC595 como en estado bajo.
digitalWrite(latchPin,LOW);
digitalWrite(dataPin,LOW);
digitalWrite(clockPin,LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, LOW);
digitalWrite(latchPin, HIGH);
// Iniciamos el puerto serie.
Serial.begin(115200);
// Configurando IP estatica.
if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
Serial.println("Error in configuration.");
}
// Conectar red WiFi.
Serial.println();
Serial.println(WiFi.macAddress());
Serial.print("Connectando con ");
Serial.println(ssid);
WiFi.begin(ssid, password); // Conecta a la wifi.
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Conectado a WiFi.");
// Iniciar Servidor Web.
server.begin();
Serial.println("Servidor Web Iniciado.");
// Mostrar la IP y Mac del ESP.
Serial.print("Esta es la IP para conectarse al WebServer: ");
Serial.print("http://");
Serial.println(WiFi.localIP());
Serial.print("y la dirección MAC de la placa es: ");
Serial.println(WiFi.macAddress());
//digitalWrite(LEDON1, LOW);
//digitalWrite(LEDOFF1, HIGH);
//shiftOut(dataPin, clockPin, LSBFIRST, (B0000000));
Serial.println("Valor de salida salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida salida_multiplexor_02: " + String(salida_multiplexor_02));
}
////////////////////////////////////////////////////////////////////////////
//****** Inicio void loop ******//
////////////////////////////////////////////////////////////////////////////
void loop() {
// Definimos estado pines del 74HC595 como en estado bajo.
digitalWrite(latchPin,LOW);
digitalWrite(dataPin,LOW);
digitalWrite(clockPin,LOW);
// Si desconectado, intentar reconectar cada 30 segundos.
if ((WiFi.status() != WL_CONNECTED) && (millis() > wait30)) {
Serial.println("Intentando reconectar WiFi...");
WiFi.disconnect();
WiFi.begin(ssid, password);
wait30 = millis() + 30000;
}
////////////////////////////////////////////////////////////////////////////
// Verifica si un cliente se ha conectado. //
////////////////////////////////////////////////////////////////////////////
WiFiClient client = server.available();
if (!client) {
return;
}
Serial.print("Nuevo cliente: ");
Serial.println(client.remoteIP());
////////////////////////////////////////////////////////////////////////////
// Espera hasta que el cliente envíe datos. //
////////////////////////////////////////////////////////////////////////////
while(!client.available()){ delay(1); }
Serial.println("Valor de salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida_multiplexor_02: " + String(salida_multiplexor_02));
////////////////////////////////////////////////////////////////////////////
// Leer la información enviada por el cliente. //
////////////////////////////////////////////////////////////////////////////
String req = client.readStringUntil('\r');
Serial.println(req);
////////////////////////////////////////////////////////////////////////////
// Realizar la solicitud del cliente. //
////////////////////////////////////////////////////////////////////////////
if (req.indexOf("on1") != -1){
abrir_1(); // Llama a la función abrir_1()
}
if (req.indexOf("off1") != -1){
cerrar_1(); // Llama a la función abrir_1()
}
if (req.indexOf("on2") != -1){
abrir_2(); // Llama a la función abrir_1()
}
if (req.indexOf("off2") != -1){
cerrar_2(); // Llama a la función abrir_1()
}
if (req.indexOf("on3") != -1){
abrir_3(); // Llama a la función abrir_1()
}
if (req.indexOf("off3") != -1){
cerrar_3(); // Llama a la función abrir_1()
}
if (req.indexOf("on4") != -1){
abrir_4(); // Llama a la función abrir_1()
}
if (req.indexOf("off4") != -1){
cerrar_4(); // Llama a la función abrir_1()
}
////////////////////////////////////////////////////////////////////////////
// Inicio página WEB //
////////////////////////////////////////////////////////////////////////////
client.println("<!DOCTYPE HTML>");
client.println("<html lang='es'>");
client.println("<html>");
client.println("<head><meta charset=utf-8></head>");
client.println("<head><meta name='viewport' content='width=device-width, initial-scale=1.0");
client.println("<br>");
client.println("<body><center><font face='Optima'>");
client.println("<h1><center><font color=' #0000CC '>-- Servidor web ESP32 --</h1>");
client.println("<h2><center><font color='#009900'>Control de Rejillas de ventilación</font></h2>");
//client.println("<h4>https:www.ebconsultores.com</h4>");
client.println("<h4><center><font color=' #0099FF '><a href='https:www.ebconsultores.com'>By EBConsultores</a>");
client.println("<br><br>");
if (rejilla1Abierta) {
client.println("<a href='on1'><button style='height:70px; width:70px; border-radius:5px; border-style: solid; border-color: green; border-width: 3px; background-color: lightgreen; '><b>Abierta<br><br>R1</button></a>");
} else {
client.println("<a href='on1'><button style='height:70px; width:70px; border-radius:5px; background-color: LightCyan; '><b>Abrir<br><br>R1</button></a>");
}
if (rejilla2Abierta) {
client.println("<a href='on2'><button style='height:70px; width:70px; border-radius:5px; border-style: solid; border-color: green; border-width: 3px; background-color: lightgreen;'><b>Abierta<br><br>R2</button></a>");
} else {
client.println("<a href='on2'><button style='height:70px; width:70px; border-radius:5px; background-color: LightCyan;'><b>Abrir<br><br>R2</button></a>");
}
if (rejilla3Abierta) {
client.println("<a href='on3'><button style='height:70px; width:70px; border-radius:5px; border-style: solid; border-color: green; border-width: 3px; background-color: lightgreen;'><b>Abierta<br><br>R3</button></a>");
} else {
client.println("<a href='on3'><button style='height:70px; width:70px; border-radius:5px; background-color: LightCyan;'><b>Abrir<br><br>R3</button></a>");
}
if (rejilla4Abierta) {
client.println("<a href='on4'><button style='height:70px; width:70px; border-radius:5px; border-style: solid; border-color: green; border-width: 3px; background-color: lightgreen;'><b>Abierta<br><br>R4</button></a>");
} else {
client.println("<a href='on4'><button style='height:70px; width:70px; border-radius:5px; background-color: LightCyan;'><b>Abrir<br><br>R4</button></a>");
}
// client.println("<a href='on1'><button> Abrir </p>R1</button></a>");
// client.println("<a href='on2'><button> Abrir </p>R2</button></a>");
// client.println("<a href='on3'><button> Abrir </p>R3</button></a>");
// client.println("<a href='on4'><button> Abrir </p>R4</button></a>");
client.println("<br><br>");
if (rejilla1Abierta) {
client.println("<a href='off1'><button style='height:70px; width:70px; border-radius:5px; background-color: LightCyan;'><b>Cerrar<br><br>R1</button></a>");
} else {
client.println("<a href='off1'><button style='height:70px; width:70px; border-radius:5px; border-style: solid; border-color: Red; border-width: 3px; background-color: Salmon;'><b>Cerrada<br><br>R1</button></a>");
}
if (rejilla2Abierta) {
client.println("<a href='off2'><button style='height:70px; width:70px; border-radius:5px; background-color: LightCyan;'><b>Cerrar<br><br>R2</button></a>");
} else {
client.println("<a href='off2'><button style='height:70px; width:70px; border-radius:5px; border-style: solid; border-color: Red; border-width: 3px; background-color: Salmon;'><b>Cerrada<br><br>R2</button></a>");
}
if (rejilla3Abierta) {
client.println("<a href='off3'><button style='height:70px; width:70px; border-radius:5px; background-color: LightCyan;'><b>Cerrar<br><br>R3</button></a>");
} else {
client.println("<a href='off3'><button style='height:70px; width:70px; border-radius:5px; border-style: solid; border-color: Red; border-width: 3px; background-color: Salmon;'><b>Cerrada<br><br>R3</button></a>");
}
if (rejilla4Abierta) {
client.println("<a href='off4'><button style='height:70px; width:70px; border-radius:5px; background-color: LightCyan;'><b>Cerrar<br><br>R4</button></a>");
} else {
client.println("<a href='off4'><button style='height:70px; width:70px; border-radius:5px; border-style: solid; border-color: Red; border-width: 3px; background-color: Salmon;'><b>Cerrada<br><br>R4</button></a>");
}
// client.println("<a href='off1'><button>Cerrar</p>R1</button></a>");
// client.println("<a href='off2'><button>Cerrar</p>R2</button></a>");
// client.println("<a href='off3'><button>Cerrar</p>R3</button></a>");
// client.println("<a href='off4'><button>Cerrar</p>R4</button></a>");
client.println("<h5><center><footer><font face='optima'><font color='#808b96 '><u>Aplicación creada por: DGFP & FPDG</u></font></h2></footer>");
client.println("</font></center></body></html>");
client.println("</body>");
client.println("</html>");
////////////////////////////////////////////////////////////////////////////
// Fin página WEB //
////////////////////////////////////////////////////////////////////////////
}
////////////////////////////////////////////////////////////////////////////
//****** Fin void loop ******//
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
// Comandos abrir y cerrar compuertas //
////////////////////////////////////////////////////////////////////////////
void abrir_1() {
delay(200);
if (estadoR1 == "ON") {
Serial.println("LA REJILLA 1 YA ESTABA ABIERTA");
} else {
if (!rejilla1Abierta) {
// enciende la salida 1 mientras mantiene encendida la salida 9.
salida_multiplexor_01 = salida_multiplexor_01 += r1a ; // Sumar r1a (1) a salida_multiplexor_01.
salida_multiplexor_02 = salida_multiplexor_02 += lc1; // Sumar lc1 (1) a salida_multiplexor_02.
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_02: " + String(salida_multiplexor_02));
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
delay(tiempoApertura);
// Apaga la salida 1 y vuelve a mantiene encendida la salida 9
salida_multiplexor_01 = (salida_multiplexor_01 -= r1a); // Apaga la salida 1.
salida_multiplexor_02 = salida_multiplexor_02; // Mantiene encendida la salida 9.
Serial.println("Valor de salida APAGADO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida MANTIENE LED salida_multiplexor_02: " + String(salida_multiplexor_02));
//digitalWrite(latchPin, LOW);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
rejilla1Abierta = true; // Actualizar el estado.
estadoR1 = "ON"; // Actualizar el estado.
}
}
}
void cerrar_1() {
delay(200);
if (estadoR1 == "OFF") {
Serial.println("LA REJILLA 1 YA ESTABA CERRADA");
} else {
// if (!rejilla1Abierta) {
// enciende la salida 2 mientras mantiene encendida la salida 9.
salida_multiplexor_01 = (salida_multiplexor_01 += r1c) ; // Sumar r1C (2) a salida_multiplexor_01 y mantener encendida la salida 9.
salida_multiplexor_02 = salida_multiplexor_02;
Serial.println("");
Serial.println("ESTAS CERRANDO LA REJILLA 1, ENCENDIENDO LED 2 MUX 1" );
Serial.println("");
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_02: " + String(salida_multiplexor_02));
Serial.println("");
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
delay(tiempoCierre);
// Apaga las salidas 2 y 9
salida_multiplexor_01 = (salida_multiplexor_01 - r1c); // Apaga la salida 1.
salida_multiplexor_02 = (salida_multiplexor_02 - lc1); // Apaga la salida 9.
Serial.println("");
Serial.println("ESTAS CERRANDO LA REJILLA 1, APAGANDO LED 1 Y 9" );
Serial.println("");
Serial.println("Valor de salida APAGADO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida MANTIENE LED salida_multiplexor_02: " + String(salida_multiplexor_02));
//digitalWrite(latchPin, LOW);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
rejilla1Abierta = false; // Actualizar el estado.
estadoR1 = "OFF"; // Actualizar el estado.
// }
}
}
void abrir_2() {
delay(200);
if (estadoR2 == "ON") {
Serial.println("LA REJILLA 2 YA ESTABA ABIERTA");
} else {
if (!rejilla2Abierta) {
// enciende la salida 2 mientras mantiene encendida la salida 10.
salida_multiplexor_01 = salida_multiplexor_01 += r2a ; // Sumar r2a (4) a salida_multiplexor_01.
salida_multiplexor_02 = salida_multiplexor_02 += lc2; // Sumar lc2 (2) a salida_multiplexor_02.
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_02: " + String(salida_multiplexor_02));
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
delay(tiempoApertura);
// Apaga la salida 2 y mantiene encendida la salida 10
salida_multiplexor_01 = (salida_multiplexor_01 -= r2a); // Apaga la salida 2.
salida_multiplexor_02 = salida_multiplexor_02; // Mantiene encendida la salida 10.
Serial.println("Valor de salida APAGADO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida MANTIENE LED salida_multiplexor_02: " + String(salida_multiplexor_02));
//digitalWrite(latchPin, LOW);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
rejilla2Abierta = true; // Actualizar el estado.
estadoR2 = "ON"; // Actualiza el estado.
}
}
}
void cerrar_2() {
delay(200);
if (estadoR2 == "OFF") {
Serial.println("LA REJILLA 2 YA ESTABA CERRADA");
} else {
// if (!rejilla2Abierta) {
// enciende la salida 4 mientras mantiene encendida la salida 10.
salida_multiplexor_01 = (salida_multiplexor_01 += r2c) ; // Sumar r2C (8) a salida_multiplexor_01 y mantener encendida la salida 10.
salida_multiplexor_02 = salida_multiplexor_02;
Serial.println("");
Serial.println("ESTAS CERRANDO LA REJILLA 2, ENCENDIENDO LED 4 MUX 1" );
Serial.println("");
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_02: " + String(salida_multiplexor_02));
Serial.println("");
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
delay(tiempoCierre);
// Apaga las salidas 4 y 10
salida_multiplexor_01 = (salida_multiplexor_01 - r2c); // Apaga la salida 4.
salida_multiplexor_02 = (salida_multiplexor_02 - lc2); // Apaga la salida 10.
Serial.println("");
Serial.println("ESTAS CERRANDO LA REJILLA 2, APAGANDO LED 4 Y 10" );
Serial.println("");
Serial.println("Valor de salida APAGADO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida MANTIENE LED salida_multiplexor_02: " + String(salida_multiplexor_02));
//digitalWrite(latchPin, LOW);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
rejilla2Abierta = false; // Actualizar el estado.
estadoR2 = "OFF"; // Actualiza el estado.
// }
}
}
void abrir_3() {
delay(200);
if (estadoR3 == "ON") {
Serial.println("LA REJILLA 3 YA ESTABA ABIERTA");
} else {
if (!rejilla3Abierta) {
// enciende las salidas 5 y 11
salida_multiplexor_01 = salida_multiplexor_01 += r3a ; // Sumar r3a (16) a salida_multiplexor_01.
salida_multiplexor_02 = salida_multiplexor_02 += lc3; // Sumar lc3 (4) a salida_multiplexor_02.
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_02: " + String(salida_multiplexor_02));
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
delay(tiempoApertura);
// Apaga la salida 5 y mantiene encendida la salida 11.
salida_multiplexor_01 = (salida_multiplexor_01 -= r3a); // Apaga la salida 5.
salida_multiplexor_02 = salida_multiplexor_02; // Mantiene encendida la salida 11.
Serial.println("Valor de salida APAGADO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida MANTIENE LED salida_multiplexor_02: " + String(salida_multiplexor_02));
//digitalWrite(latchPin, LOW);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
rejilla3Abierta = true; // Actualiza el estado.
estadoR3 = "ON"; // Actualiza el estado.
}
}
}
void cerrar_3() {
delay(200);
if (estadoR3 == "OFF") {
Serial.println("LA REJILLA 2 YA ESTABA CERRADA");
} else {
// if (!rejilla3Abierta) {
// enciende la salida 6 mientras mantiene encendida la salida 11.
salida_multiplexor_01 = (salida_multiplexor_01 += r3c) ; // Sumar r3C (32) a salida_multiplexor_01.
salida_multiplexor_02 = salida_multiplexor_02; // Mantener encendida la salida 11.
Serial.println("");
Serial.println("ESTAS CERRANDO LA REJILLA 3, ENCENDIENDO LED 6 MUX 1" );
Serial.println("");
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_02: " + String(salida_multiplexor_02));
Serial.println("");
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
delay(tiempoCierre);
// Apaga las salidas 6 y 11
salida_multiplexor_01 = (salida_multiplexor_01 - r3c); // Apaga la salida 6.
salida_multiplexor_02 = (salida_multiplexor_02 - lc3); // Apaga la salida 11.
Serial.println("");
Serial.println("ESTAS CERRANDO LA REJILLA 3, APAGANDO LED 6 Y 11" );
Serial.println("");
Serial.println("Valor de salida APAGADO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida MANTIENE LED salida_multiplexor_02: " + String(salida_multiplexor_02));
//digitalWrite(latchPin, LOW);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
rejilla3Abierta = false; // Actualizar el estado
estadoR3 = "OFF";
// }
}
}
void abrir_4() {
delay(200);
if (estadoR4 == "ON") {
Serial.println("LA REJILLA 4 YA ESTABA ABIERTA");
} else {
if (!rejilla4Abierta) {
// enciende las salidas 7 y 12
salida_multiplexor_01 = salida_multiplexor_01 += r4a ; // Sumar r4a (64) a salida_multiplexor_01.
salida_multiplexor_02 = salida_multiplexor_02 += lc4; // Sumar lc4 (8) a salida_multiplexor_02.
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_02: " + String(salida_multiplexor_02));
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
delay(tiempoApertura);
// Apaga la salida 7 y mantiene encendida la salida 12.
salida_multiplexor_01 = (salida_multiplexor_01 -= r4a); // Apaga la salida 7.
salida_multiplexor_02 = salida_multiplexor_02; // Mantiene encendida la salida 12.
Serial.println("Valor de salida APAGADO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida MANTIENE LED salida_multiplexor_02: " + String(salida_multiplexor_02));
//digitalWrite(latchPin, LOW);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
rejilla4Abierta = true; // Actualiza el estado.
estadoR4 = "ON"; // Actualiza el estado.
}
}
}
void cerrar_4() {
delay(200);
if (estadoR4 == "OFF") {
Serial.println("LA REJILLA 4 YA ESTABA CERRADA");
} else {
// if (!rejilla4Abierta) {
// enciende la salida 8 mientras mantiene encendida la salida 11.
salida_multiplexor_01 = (salida_multiplexor_01 += r4c) ; // Sumar r4C (128) a salida_multiplexor_01.
salida_multiplexor_02 = salida_multiplexor_02; // Mantener encendida la salida 12.
Serial.println("");
Serial.println("ESTAS CERRANDO LA REJILLA 4, ENCENDIENDO LED 8 MUX 1" );
Serial.println("");
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida ENCENDIDO salida_multiplexor_02: " + String(salida_multiplexor_02));
Serial.println("");
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
delay(tiempoCierre);
// Apaga las salidas 8 y 12
salida_multiplexor_01 = (salida_multiplexor_01 - r4c); // Apaga la salida 8.
salida_multiplexor_02 = (salida_multiplexor_02 - lc4); // Apaga la salida 12.
Serial.println("ESTAS CERRANDO LA REJILLA 3, APAGANDO LED 8 Y 12" );
Serial.println("");
Serial.println("Valor de salida APAGADO salida_multiplexor_01: " + String(salida_multiplexor_01));
Serial.println("Valor de salida MANTIENE LED salida_multiplexor_02: " + String(salida_multiplexor_02));
//digitalWrite(latchPin, LOW);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_02);
shiftOut(dataPin, clockPin, MSBFIRST, salida_multiplexor_01);
digitalWrite(latchPin, HIGH);
rejilla4Abierta = false; // Actualizar el estado
estadoR4 = "OFF";
// }
}
}
////////////////////////////////////////////////////////////////////////////
// Fin Comandos abrir y cerrar compuertas //
////////////////////////////////////////////////////////////////////////////