#include <Adafruit_NeoPixel.h>
const int LED_STRIP = 25;
const int LED_NUM = 16;
Adafruit_NeoPixel ledStrip(
LED_NUM, LED_STRIP,
NEO_GRB + NEO_KHZ800);
// Define the pins connected to the first 74HC165 shift register
const int dataPin1 = 27; // DS (Serial data input)
const int clockPin1 = 14; // SH_CP (Shift register clock input)
const int latchPin1 = 12; // ST_CP (Storage register clock input)
// Define the pins connected to the second 74HC165 shift register
const int dataPin2 = 2; // DS (Serial data input)
const int clockPin2 = 0; // SH_CP (Shift register clock input)
const int latchPin2 = 4; // ST_CP (Storage register clock input)
void setup(void) {
Serial.begin(115200);
ledStrip.begin();
// Initialize the pins for the first shift register
pinMode(dataPin1, INPUT);
pinMode(clockPin1, OUTPUT);
pinMode(latchPin1, OUTPUT);
// Initialize the pins for the second shift register
pinMode(dataPin2, INPUT);
pinMode(clockPin2, OUTPUT);
pinMode(latchPin2, OUTPUT);
Serial.print("Setup completed");
}
void loop(void) {
ledStrip.show();
byte data1 = readShiftRegister(dataPin1, clockPin1, latchPin1);
byte data2 = readShiftRegister(dataPin2, clockPin2, latchPin2);
bool isAnySet = false;
int ledPinsToOff[16] = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
//ledStrip.setPixelColor(i,ledStrip.Color(0,255,0));
for(int i =0;i<9;i++)
{
if(IsBitSet(data1,i))
{
isAnySet = true;
ledPinsToOff[i] = true;
}
}
for(int i =8;i<16;i++)
{
if(IsBitSet(data2,i-8))
{
isAnySet = true;
ledPinsToOff[i] = true;
}
}
if(isAnySet)
{
ledStrip.fill(ledStrip.Color(0,255,0));
}
for(int i =0;i<16;i++)
{
if(ledPinsToOff[i])
{
ledStrip.setPixelColor(i,0);
}
}
delay((50));
}
byte readShiftRegister(int dataPin, int clockPin, int latchPin) {
digitalWrite(latchPin, LOW);
delayMicroseconds(5);
digitalWrite(latchPin, HIGH);
byte data = 0;
for (int i = 7; i >= 0; i--) {
digitalWrite(clockPin, LOW);
delayMicroseconds(5);
data |= (digitalRead(dataPin) << i);
digitalWrite(clockPin, HIGH);
delayMicroseconds(5);
}
return data;
}
bool IsBitSet(byte b, int pos)
{
return (b & (1 << pos)) != 0;
}
void printArray(bool arr[], int size)
{
for(int i = 0; i < size; i++)
{
Serial.print(arr[i]);
}
Serial.println(";");
}