/***************************************
**** ESP32_Ix10-Ox10[Biestable] ****
**** Autor: José M. Lázaro ****
**** Fecha inicial: 2023-09-06 ****
**** Fecha: 2023-09-14 ****
**** Versión: 1.0 ****
***************************************/
// Asignación variables de Entradas/Salidas
int x=1;
int I[11]; // Del 0 al 10
int O[11]; // Del 0 al 10
int p[11]; // Del 0 al 10
int pb[11]; // Del 0 al 10
bool serie=0; // Cuando se pulsa, escribe acción via COM.
//Variables para pulsador Biestable **Pulsadores Individual**
int ValI1=0;
int ValO1=0;
int OldValI1=0;
int ValI2=0;
int ValO2=0;
int OldValI2=0;
int ValI3=0;
int ValO3=0;
int OldValI3=0;
int ValI4=0;
int ValO4=0;
int OldValI4=0;
int ValI5=0;
int ValO5=0;
int OldValI5=0;
int ValI6=0;
int ValO6=0;
int OldValI6=0;
int ValI7=0;
int ValO7=0;
int OldValI7=0;
int ValI8=0;
int ValO8=0;
int OldValI8=0;
int ValI9=0;
int ValO9=0;
int OldValI9=0;
int ValI10=0;
int ValO10=0;
int OldValI10=0;
void setup() { //Sólo se ejecuta una vez
//Configuración Comunicación Serie
Serial.begin(115200);
I[1] = 36; // Entrada 1 = Pin GPIO36
I[2] = 39; // Entrada 2 = Pin GPIO39
I[3] = 34; // Entrada 3 = Pin GPIO34
I[4] = 35; // Entrada 4 = Pin GPIO35
I[5] = 32; // Entrada 5 = Pin GPIO32
I[6] = 33; // Entrada 6 = Pin GPIO33
I[7] = 25; // Entrada 7 = Pin GPIO25
I[8] = 26; // Entrada 8 = Pin GPIO26
I[9] = 27; // Entrada 9 = Pin GPIO27
I[10]= 14; // Entrada 10 = Pin GPIO14
O[1] = 23; // Salida 1 = Pin GPIO12
O[2] = 22; // Salida 2 = Pin GPIO4
O[3] = 21; // Salida 3 = Pin GPIO16
O[4] = 19; // Salida 4 = Pin GPIO17
O[5] = 18; // Salida 5 = Pin GPIO18
O[6] = 17; // Salida 6 = Pin GPIO19
O[7] = 16; // Salida 7 = Pin GPIO16
O[8] = 4; // Salida 8 = Pin GPIO17
O[9] = 2; // Salida 9 = Pin GPIO18
O[10]= 15; // Salida 10 = Pin GPIO19
for (x=1; x<11; x++) {
p[x] = 0; // Todas las variables a 0
pb[x] = 0; // Todas las variables a 0
//Configuración de los pines de I-Entradas/O-Salidas
pinMode(I[x], INPUT);
pinMode(O[x], OUTPUT);
}
}
void loop() {
entradas();
if (serie==1) salidas(); // Sólo inicia la salida si se pulsa algo.
if (serie==1) comuSerie(); // Sólo inicia la comunicaión serie si se pulsa algo.
}
void entradas() {
for (x=1; x<11; x++) {
if ((digitalRead(I[x])==0) & (p[x]==1)) {
p[x]=0;
pb[x]=!pb[x];
serie=1;
}
if ((digitalRead(I[x])==1) & (p[x]==0)) {
p[x]=1;
serie=1;
}
}
}
void salidas() {
for (x=1; x<11; x++) {
if (pb[x]==1) {
digitalWrite(O[x], HIGH);
}else{
digitalWrite(O[x], LOW);
}
}
}
void comuSerie() {
for (x=1; x<11; x++) {
Serial.print("Pulsador ");
Serial.print(x);
Serial.print(": ");
Serial.print(p[x]);
Serial.print(" / ");
Serial.println(pb[x]);
serie=0;
}
}
/*void old_loop() { //Se ejecuta siempre, ciclicamente.
//Entrada por Pulsadores físicos.
//Rutina Pulsador I1 Biestable
ValI1=digitalRead(I1);
if ((digitalRead(I1)==HIGH) && (OldValI1==LOW)) {
Serial.println("Pulsado I1");
ValO1=1-ValO1;
delay(300); //Retraso para eliminar rebotes.
}
OldValI1=ValI1;
if ((ValO1==1)&&(digitalRead(O1))==0){
digitalWrite(O1, HIGH);
Serial.println("Salida O1: ON");
}
if ((ValO1==0)&&(digitalRead(O1))==1){
digitalWrite(O1, LOW);
Serial.println("Salida O1: OFF");
}
//Rutina Pulsador I2 Biestable
ValI2=digitalRead(I2);
if ((digitalRead(I2)==HIGH) && (OldValI2==LOW)) {
Serial.println("Pulsado I2");
ValO2=1-ValO2;
delay(300);
}
OldValI2=ValI2;
if ((ValO2==1)&&(digitalRead(O2))==0){
digitalWrite(O2, HIGH);
Serial.println("Salida O2: ON");
}
if ((ValO2==0)&&(digitalRead(O2))==1){
digitalWrite(O2, LOW);
Serial.println("Salida O2: OFF");
}
//Rutina Pulsador I3 Biestable
ValI3=digitalRead(I3);
if ((digitalRead(I3)==HIGH) && (OldValI3==LOW)) {
Serial.println("Pulsado I3");
ValO3=1-ValO3;
delay(300);
}
OldValI3=ValI3;
if ((ValO3==1)&&(digitalRead(O3))==0){
digitalWrite(O3, HIGH);
Serial.println("Salida O3: ON");
}
if ((ValO3==0)&&(digitalRead(O3))==1){
digitalWrite(O3, LOW);
Serial.println("Salida O3: OFF");
}
//Rutina Pulsador I4 Biestable
ValI4=digitalRead(I4);
if ((digitalRead(I4)==HIGH) && (OldValI4==LOW)) {
Serial.println("Pulsado I4");
ValO4=1-ValO4;
delay(300);
}
OldValI4=ValI4;
if ((ValO4==1)&&(digitalRead(O4))==0){
digitalWrite(O4, HIGH);
Serial.println("Salida O4: ON");
}
if ((ValO4==0)&&(digitalRead(O4))==1){
digitalWrite(O4, LOW);
Serial.println("Salida O4: OFF");
}
//Rutina Pulsador I5 Biestable
ValI5=digitalRead(I5);
if ((digitalRead(I5)==HIGH) && (OldValI5==LOW)) {
Serial.println("Pulsado I5");
ValO5=1-ValO5;
delay(300); //Retraso para eliminar rebotes.
}
OldValI5=ValI5;
if ((ValO5==1)&&(digitalRead(O5))==0){
digitalWrite(O5, HIGH);
Serial.println("Salida O5: ON");
}
if ((ValO5==0)&&(digitalRead(O5))==1){
digitalWrite(O5, LOW);
Serial.println("Salida O5: OFF");
}
//Rutina Pulsador I6 Biestable
ValI6=digitalRead(I6);
if ((digitalRead(I6)==HIGH) && (OldValI6==LOW)) {
Serial.println("Pulsado I6");
ValO6=1-ValO6;
delay(300);
}
OldValI6=ValI6;
if ((ValO6==1)&&(digitalRead(O6))==0){
digitalWrite(O6, HIGH);
Serial.println("Salida O6: ON");
}
if ((ValO6==0)&&(digitalRead(O6))==1){
digitalWrite(O6, LOW);
Serial.println("Salida O6: OFF");
}
}*/