// 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
74HC165
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