// === ESP32 + CD74HC4067 (entrées analogiques) + 74HC595 (sorties LEDs) ===
// CD74HC4067
#define S0 4
#define S1 5
#define S2 18
#define S3 19
#define EN 12
#define SIG 25 // COM relié à ADC
// 74HC595
#define DS 27 // Data
#define SHCP 26 // Clock
#define STCP 14 // Latch
void setup() {
Serial.begin(115200);
Serial.println("ESP32 : CD74HC4067 (entrées) + 74HC595 (sorties LEDs)");
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(EN, LOW);
pinMode(DS, OUTPUT);
pinMode(SHCP, OUTPUT);
pinMode(STCP, OUTPUT);
}
void selectChannel(byte channel) {
digitalWrite(S0, channel & 0x01);
digitalWrite(S1, (channel >> 1) & 0x01);
digitalWrite(S2, (channel >> 2) & 0x01);
digitalWrite(S3, (channel >> 3) & 0x01);
delayMicroseconds(5);
}
int readMux(byte channel) {
selectChannel(channel);
delayMicroseconds(5);
return analogRead(SIG);
}
// Envoie un octet vers le 74HC595
void write595(byte data) {
digitalWrite(STCP, LOW);
shiftOut(DS, SHCP, MSBFIRST, data);
digitalWrite(STCP, HIGH);
}
void loop() {
byte leds = 0; // 8 bits = 8 LEDs
Serial.println("Lecture des capteurs :");
for (int i = 0; i < 8; i++) {
int val = readMux(i);
Serial.print("Canal ");
Serial.print(i);
Serial.print(" = ");
Serial.println(val);
// Seuil simple : si capteur > 2000 -> LED ON
if (val > 2000) {
leds |= (1 << i);
}
}
// Mise à jour des LEDs via 74HC595
write595(leds);
delay(500);
}