Bueno cuantas horas perdidas con wokwi y este multiplexor.
con Proteus que maravilla como funciona!!!!!!! ya me habia olvidado
No use el ESP32, use un NANO pero el concepto es el mismo, usar el mismo código con los pines del ESP32 y no usar la libreria
#include <LibPrintf.h>
Que es para microcontroladores que no tienen printf
Todo anda perfecto
Esos son los botones que clickee
boton 0, 4, 8 y 11
El código muestra cada cambio. Es a los fines visuales.
// Arduino NANO
#include <LibPrintf.h> // solo para NANO en ESP32 ya esta nativo
// https://github.com/mkogax/GG_for_Arduino
// disponible en Administrador de librerias IDE
//Mux control pins
const int s0 = 12;
const int s1 = 11;
const int s2 = 10;
const int s3 = 9;
//Mux in "SIG" pin
const int SIG_pin = 2;
byte controlPin[] = { s0, s1, s2, s3 };
byte tmp[16] = {0};
byte tmpAnt[16] = {0};
byte readMux(byte channel) {
// Loop a través de los 4 selectores
for (byte b = 0; b < 4; b++, channel >>= 1) {
digitalWrite(controlPin[b], channel & 1);
}
// Leo y devuelvo el valor
return digitalRead(SIG_pin);
}
void setup(){
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(SIG_pin, INPUT_PULLUP);
digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
Serial.begin(9600);
}
void loop(){
//Loop through and read all 16 values
//Reports back Value at channel 6 is: 346
for(int i = 0; i < 16; i ++){
tmp[i] = readMux(i);
if (tmp[i] != tmpAnt[i]) {
printf("Canal [%2d] = %d", i, tmp[i]);
Serial.println();
}
tmpAnt[i] = tmp[i];
}
}
Para los que se sorprendan con printf vean este video en inglés (por supuesto, lo bueno casi siempre en inglés aunque hay excepciones, Luis Llamas por ejemplo)