// Arduino Pro Micro 74HC165
int clock = 15; // CLK
int clockInhibit = 4; // CLK/INH
int load = 10; // SH/LD#
int dataIn = 14; // QH
// Define other variables of the code
byte switchStates1, switchStates2, switchStates3, switchStates4, switchStates5, switchStates6, switchStates7, switchStates8, switchStates9;
byte us = 50; // logic diagram timing (µs)
void setup() {
// Setup Serial Monitor
Serial.begin(9600);
// Setup 74HC165 connections
pinMode(load, OUTPUT);
pinMode(clockInhibit, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(dataIn, INPUT);
}
void loop() {
// Write pulse to load pin
digitalWrite(clock, HIGH);
delayMicroseconds(us);
digitalWrite(load, LOW);
delayMicroseconds(us);
digitalWrite(load, HIGH);
delayMicroseconds(us);
// Get data from 74HC165
digitalWrite(clockInhibit, LOW);
delayMicroseconds(us);
switchStates1 = myShiftIn(dataIn, clock, MSBFIRST);
switchStates2 = myShiftIn(dataIn, clock, MSBFIRST);
switchStates3 = myShiftIn(dataIn, clock, MSBFIRST);
switchStates4 = myShiftIn(dataIn, clock, MSBFIRST);
switchStates5 = myShiftIn(dataIn, clock, MSBFIRST);
switchStates6 = myShiftIn(dataIn, clock, MSBFIRST);
switchStates7 = myShiftIn(dataIn, clock, MSBFIRST);
switchStates8 = myShiftIn(dataIn, clock, MSBFIRST);
switchStates9 = myShiftIn(dataIn, clock, MSBFIRST);
digitalWrite(clockInhibit, HIGH);
// Print to serial monitor
Serial.print("Pin States -- 1 -- 1-8:\r\n");
Serial.println(switchStates1, BIN);//[0], BIN);
Serial.print("Pin States -- 2 -- 9-16:\r\n");
Serial.println(switchStates2, BIN);//[1], BIN);
Serial.print("Pin States -- 3 -- 17-24:\r\n");
Serial.println(switchStates3, BIN);//[2], BIN);
Serial.print("Pin States -- 4 -- 25-32:\r\n");
Serial.println(switchStates4, BIN);//[3], BIN);
Serial.print("Pin States -- 5 -- 33-40:\r\n");
Serial.println(switchStates5, BIN);//[4], BIN);
Serial.print("Pin States -- 6 -- 41-48:\r\n");
Serial.println(switchStates6, BIN);//[5], BIN);
Serial.print("Pin States -- 7 -- 49-56:\r\n");
Serial.println(switchStates7, BIN);//[6], BIN);
Serial.print("Pin States -- 8 -- 57-64:\r\n");
Serial.println(switchStates8, BIN);//[7], BIN);
Serial.print("Pin States -- 9 -- 65-72:\r\n");
Serial.println(switchStates9, BIN);//[8], BIN);
Serial.print("\r\n\r\n");
delay(500);
}
uint8_t myShiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) {
uint8_t value = 0;
uint8_t i;
for (i = 0; i < 8; ++i) {
digitalWrite(clockPin, HIGH);
delayMicroseconds(us);
if (bitOrder == LSBFIRST)
value |= digitalRead(dataPin) << i;
else
value |= digitalRead(dataPin) << (7 - i);
digitalWrite(clockPin, LOW);
delayMicroseconds(us);
}
return value;
}