class RegisterControlar{
private:
byte data;
byte latch;
byte clock;
byte registerCount;
byte PINs[2][4]={
{B10000000,B01000000,B0010000,B00010000},
{B00001000,B00000100,B00000010,B00000001}
};
byte PIN[8]={
B10000000,B01000000,B0010000,B00010000,
B00001000,B00000100,B00000010,B00000001
};
public:
RegisterControlar(byte registerCount,byte data,byte latch,byte clock){
this->registerCount = registerCount;
this->data = data;
this->latch = latch;
this->clock = clock;
}
void init(){
pinMode(data, OUTPUT);
pinMode(latch, OUTPUT);
pinMode(clock, OUTPUT);
}
void setPin(int registerNum,byte pin){ // register number 0 is the last register
if(registerNum > registerCount){
registerNum = registerCount - 1;
}
if(registerNum < 0){
registerNum = 0;
}
//---------------------------------
if(pin < 8 && pin >= 0){
digitalWrite(latch, LOW);
for(int i = 0; i < registerCount;i++){
if(registerNum == i){
shiftOut(data,clock,LSBFIRST,PIN[pin]);
}else{
shiftOut(data,clock,LSBFIRST,B00000000);
}
}
digitalWrite(latch, HIGH);
}
//---------------------------------
}
};
#define data 3
#define latch 4
#define clock 5
RegisterControlar Rcontrolar(4,data,latch,clock);
void setup() {
Rcontrolar.init();
Rcontrolar.setPin(1,4);
}
void loop() {
// put your main code here, to run repeatedly:
}