// Define ESP32-C6 pins
const int dataPin = 19; // Q7 (serial output)
const int clockPin = 18; // CP (clock)
const int loadPin = 5; // PL (parallel load)
// Optional: const int clockEnablePin = 23; // CE (clock enable), uncomment if used
void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
// Set pin modes
pinMode(dataPin, INPUT);
pinMode(clockPin, OUTPUT);
pinMode(loadPin, OUTPUT);
// Optional: pinMode(clockEnablePin, OUTPUT); // Uncomment if used
// Initial states
digitalWrite(clockPin, LOW);
digitalWrite(loadPin, HIGH);
// Optional: digitalWrite(clockEnablePin, HIGH); // Disable clock if used
}
void loop() {
// Step 1: Load parallel inputs into the shift register
digitalWrite(loadPin, LOW); // Enable loading
delayMicroseconds(5); // Brief pulse
digitalWrite(loadPin, HIGH); // Latch the data
// Step 2: Shift out the data
byte incoming = 0;
// Optional: digitalWrite(clockEnablePin, LOW); // Enable clock if used
for (int i = 0; i < 8; i++) {
incoming = incoming << 1; // Shift left
incoming |= digitalRead(dataPin); // Read bit and add to byte
digitalWrite(clockPin, HIGH); // Clock pulse
delayMicroseconds(5);
digitalWrite(clockPin, LOW);
}
// Optional: digitalWrite(clockEnablePin, HIGH); // Disable clock if used
// Print the result as binary
Serial.print("Inputs: ");
Serial.println(incoming, BIN);
delay(500); // Slow down for readability
}
esp:0
esp:1
esp:2
esp:3
esp:4
esp:5
esp:6
esp:7
esp:8
esp:9
esp:10
esp:11
esp:12
esp:13
esp:15
esp:18
esp:19
esp:20
esp:21
esp:22
esp:23
esp:3V3
esp:RST
esp:5V
esp:GND.1
esp:NC0
esp:NC1
esp:GND.2
esp:GND.3
esp:RX
esp:TX
esp:GND.4
sr1:PL
sr1:CP
sr1:D4
sr1:D5
sr1:D6
sr1:D7
sr1:Q7_N
sr1:GND
sr1:Q7
sr1:DS
sr1:D0
sr1:D1
sr1:D2
sr1:D3
sr1:CE
sr1:VCC
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
r1:1
r1:2
gnd1:GND