// 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
}
Loading
esp32-c6-devkitc-1
esp32-c6-devkitc-1