//Tut from sparkfun, edited for multiple shift ins. This one works //see 74165 data sheets for more details on how it works /* IO Definitions ProCAT Flash*/ //#define DATA_IN 4 //#define CLK 5 //#define LATCH_EN 6 // HARDWARE CONNECTIONS // Connect the following pins between your Arduino and the 74HC165 Breakout Board // Connect pins A-H to 5V or GND or switches or whatever const int data_pin = 4; // Connect Pin 11 to SER_OUT (serial data out) const int clk_pin = 5; // Connect Pin 12 to CLK (the clock that times the shifting) const int shld_pin = 6; // Connect Pin 8 to SH/!LD (shift or active low load) const int ce_pin = 9; // Connect Pin 9 to !CE (clock enable, active low) byte incoming; // Variable to store the 8 values loaded from the shift register byte incoming2; // Variable to store the 8 values loaded from the shift register byte incoming3; // Variable to store the 8 values loaded from the shift register // The part that runs once void setup() { // Initialize serial to gain the power to obtain relevant information, 9600 baud Serial.begin(9600); // Initialize each digital pin to either output or input // We are commanding the shift register with each pin with the exception of the serial // data we get back on the data_pin line. pinMode(shld_pin, OUTPUT); pinMode(ce_pin, OUTPUT); pinMode(clk_pin, OUTPUT); pinMode(data_pin, INPUT); // Required initial states of these two pins according to the datasheet timing diagram digitalWrite(clk_pin, HIGH); digitalWrite(shld_pin, HIGH); } // The part that runs to infinity and beyond void loop() { incoming = read_shift_regs(); // Read the shift register, it likes that // Print out the values being read from the shift register Serial.println("\nThe incoming values of the shift register are: "); Serial.print("ABCDEFGH : "); print_byte(incoming); // Print every 1 and 0 that correlates with A through H //Serial.println(incoming,BIN); // This way works too but leaves out the leading zeros delay(2000); // Wait for some arbitrary amount of time } // This code is intended to trigger the shift register to grab values from it's A-H inputs byte read_shift_regs() { byte the_shifted = 0; // An 8 bit number to carry each bit value of A-H // Trigger loading the state of the A-H data lines into the shift register digitalWrite(shld_pin, LOW); delayMicroseconds(5); // Requires a delay here according to the datasheet timing diagram digitalWrite(shld_pin, HIGH); delayMicroseconds(5); // Required initial states of these two pins according to the datasheet timing diagram pinMode(clk_pin, OUTPUT); pinMode(data_pin, INPUT); digitalWrite(clk_pin, HIGH); digitalWrite(ce_pin, LOW); // Enable the clock // Get the A-H values result1 = shiftIn(data_pin, clk_pin, MSBFIRST); result2 = shiftIn(data_pin, clk_pin, MSBFIRST); result3 = shiftIn(data_pin, clk_pin, MSBFIRST); digitalWrite(ce_pin, HIGH); // Disable the clock //return the_shifted; } // A function that prints all the 1's and 0's of a byte, so 8 bits +or- 2 void print_byte(byte val) { byte i; for(byte i=0; i<=7; i++) { Serial.print(val >> i & 1, BIN); // Magic bit shift, if you care look up the <<, >>, and & operators } Serial.print("\n"); // Go to the next line, do not collect $200 }