// CD74HC4067
// 16-Channel Analog Multiplexer
// Demultiplexing not implemented for this simulation.
// https://www.ti.com/lit/ds/symlink/cd74hc4067.pdf
#include <Adafruit_NeoPixel.h>
#define E 21
#define S0 18
#define S1 19
#define S2 22
#define S3 23
#define COM 34
#define NP_PIN 4
#define NUMPIXELS 16
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, NP_PIN, NEO_GRB + NEO_KHZ800);
const uint8_t controlPins[] = { S0, S1, S2, S3 };
float readMux(uint8_t channel)
{
digitalWrite(E, HIGH); // Disable chip before changing channel.
delay(1);
for(int8_t i = 3; i >= 0; i--)
{
int8_t b = (channel >> i) & 1;
digitalWrite(controlPins[i], b);
// Serial.print(b);
}
digitalWrite(E, LOW); // Enable chip after changing channel.
delay(1);
// Serial.print(": ");
return analogRead(COM);
}
void setup()
{
Serial.begin(115200);
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pixels.begin();
}
void loop()
{
pixels.clear();
for(uint8_t i = 0; i < 16; i++)
{
float f = readMux(i);
pixels.setPixelColor(i, pixels.Color(0, f / 4095.0 * 255.0, 0));
// Serial.print(i);
// Serial.print(" = ");
// Serial.println(f);
}
pixels.show();
}
CD74HC4067:COM
CD74HC4067:VCC
CD74HC4067:E
CD74HC4067:I0
CD74HC4067:I1
CD74HC4067:I2
CD74HC4067:I3
CD74HC4067:I4
CD74HC4067:I5
CD74HC4067:I6
CD74HC4067:I7
CD74HC4067:I8
CD74HC4067:I9
CD74HC4067:I10
CD74HC4067:I11
CD74HC4067:I12
CD74HC4067:I13
CD74HC4067:I14
CD74HC4067:I15
CD74HC4067:S0
CD74HC4067:S1
CD74HC4067:S2
CD74HC4067:S3
CD74HC4067:GND
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
neopixels:DOUT
neopixels:VDD
neopixels:VSS
neopixels:DIN
pot1:GND
pot1:SIG
pot1:VCC
pot2:GND
pot2:SIG
pot2:VCC
pot3:GND
pot3:SIG
pot3:VCC
pot4:GND
pot4:SIG
pot4:VCC
pot5:GND
pot5:SIG
pot5:VCC
pot6:GND
pot6:SIG
pot6:VCC
pot7:GND
pot7:SIG
pot7:VCC
pot8:GND
pot8:SIG
pot8:VCC
pot9:GND
pot9:SIG
pot9:VCC
pot10:GND
pot10:SIG
pot10:VCC
pot11:GND
pot11:SIG
pot11:VCC
pot12:GND
pot12:SIG
pot12:VCC
pot13:GND
pot13:SIG
pot13:VCC
pot14:GND
pot14:SIG
pot14:VCC
pot15:GND
pot15:SIG
pot15:VCC
pot16:GND
pot16:SIG
pot16:VCC
gnd1:GND
vcc1:VCC
sw1:1
sw1:2
sw1:3