Code: Select all
//PARALLEL TO SERIAL SHIFT REGISTER (SN74LS165 8-BIT)
//DEFINE VARIABLES
//DEFINE SERIAL IN/OUT PINS
int clockPin = 7;
int latchPin = 8;
int dataPin = 9;
//DEFINE SWITCH DATA VARIABLES
int switchValue = 0; //variable to hold value of switch states
int switchState = 0; //variable to read state of each switch
void setup(){
//start serial and set baud rate for serial window
Serial.begin(9600);
//define pin modes
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, INPUT);
}
void loop(){
//set latchPin low and then high for shift register to collect latest parallel data
digitalWrite (latchPin, LOW);
//wait for the shift register to read data
delayMicroseconds (10);
//set latchPin high to end parallel read and begin serial transmission
digitalWrite (latchPin, HIGH);
//with the latch pin low, collect serial data
switchValue = 0; //clear switchValue variable
for (int i = 0; i <8; i ++){
digitalWrite (clockPin, LOW); //set clock Pin low to prepare to read data
switchState = digitalRead (dataPin); //read dataPin value
switchValue = (switchValue << 1); //bitshift one to the left to open LSB to write switchState
switchValue = switchValue | (!switchState); //add switchState value to LSB of switchValue
digitalWrite (clockPin, HIGH); //complete BIT data transmission; prepare for next
}
Serial.println(switchValue, BIN); //debugging in serial window of switches 1 through 8)
Serial.println(switchValue);
Serial.println(switchValue, HEX);
Serial.println();
delay (2000); //wait to avoid overloading serial window
}