const byte latchPin = 5; // Data in
const byte clockPin = 18; // klockpin
const byte dataPin = 19; // Misopin
uint32_t oldOptionSwitch = 0; // Föregående data
const int pulseWidth = 10; // Pulstid
void setup() {
Serial.begin(115200);
Serial.println("Turn on of the switches");
Serial.println("Top row is switch 0 (right) to switch 7 (left)");
Serial.println("Second row is 8 to 15, and so on");
pinMode( clockPin, OUTPUT); // Klocksignal (låg)
pinMode( latchPin, OUTPUT); // Kopera input in i registerna, idle high
digitalWrite(latchPin, HIGH);
}
void loop() {
digitalWrite( latchPin, LOW);
delayMicroseconds( pulseWidth);
digitalWrite( latchPin, HIGH);
uint32_t optionSwitch = 0;
for( int i=24; i>=0; i-=8)
{
optionSwitch |= (( uint32_t) ReadOne165()) << i;
}
for(int i = 0; i<32; i++)
{
if(bitRead( optionSwitch, i) !=bitRead( oldOptionSwitch, i))
{
Serial.print("Switch ");
if( i < 10)
Serial.print( " ");
Serial.print(i);
Serial.print(" is now ");
Serial.println( bitRead( optionSwitch, i) == 0 ? "down *" : " up *");
}
}
oldOptionSwitch = optionSwitch;
delay( 25);
}
byte ReadOne165()
{
byte ret = 0x00;
for( int i=7; i>0; i--)
{
if( digitalRead( dataPin) == HIGH)
bitSet( ret, i);
digitalWrite( clockPin, HIGH);
delayMicroseconds( pulseWidth);
digitalWrite( clockPin, LOW);
}
return( ret);
}