#define latchPin 15
#define clkPin 12
#define dataPin 13
#define pisoLatchPin 2
#define pisoDataPin 4
uint8_t ledState = 255;
void printBits(uint8_t data){
int8_t i = 7;
while(i>=0){
Serial.print(bitRead(data, i));
i--;
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Initializing");
//For SIPO
pinMode(latchPin, OUTPUT);
pinMode(clkPin, OUTPUT);
pinMode(dataPin, OUTPUT);
//For PISO
pinMode(pisoLatchPin, OUTPUT);
//pinMode(pisoClockPin, OUTPUT);
pinMode(pisoDataPin, INPUT);
digitalWrite(latchPin, LOW);
digitalWrite(pisoLatchPin, HIGH);
digitalWrite(clkPin, LOW);
shiftOut(dataPin, clkPin, MSBFIRST, ledState);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
// Step 1: Sample
// Uncomment this line in Real World Application
// digitalWrite(clkPin, HIGH);
digitalWrite(pisoLatchPin, LOW);
digitalWrite(pisoLatchPin, HIGH);
uint8_t switchState = shiftIn(pisoDataPin, clkPin, MSBFIRST);
Serial.print("Switch: ");
printBits(switchState);
Serial.println();
if(ledState != switchState){
ledState = switchState;
shiftOut(dataPin, clkPin, MSBFIRST, ledState);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
Serial.println("State Changed");
}
delay(1000);
}