#include <Arduino.h>
#include <ShiftRegister74HC595.h>
const int chainSize = 3;
const int dataPin = 2; // data LDSI 串行数据输入口
const int clockPin = 3; // clock LDSCK 串行时钟信号端口
const int latchPin = 4; // latch LDSTR 并行数据输出控制端口
// LDEN, 芯片使能管脚,为高时:所有并行输出口为高阻态。
// 为低时:芯片使能。也可以把该管脚直接接地或者焊接电阻R1。
ShiftRegister74HC595<chainSize> sr(dataPin, clockPin, latchPin);
void deinit(){
uint8_t pinValues[] = {B11111110, B11111100, B00000111};
sr.setAll(pinValues);
}
void setup() {
Serial.begin(9600);
}
void loop() {
// set all pins at once
uint8_t pinValues[] = {B11111110, B11111100, B00000111};
sr.setAll(pinValues);
Serial.println("set all pins at once");
delay(5000);
// 重新初始化
uint8_t initPinValues[] = {B11111111, B11111111, B0000000};
sr.setAll(initPinValues);
Serial.println("reinit");
delay(2000);
// 同步点亮
for (int i = 0; i < 16; i++) {
sr.set(i, LOW);
delay(1000);
}
for (int i = 16; i < 24; i++) {
sr.set(i, HIGH);
delay(1000);
}
// 重新初始化
sr.setAll(initPinValues);
Serial.println("reinit");
delay(2000);
// 获取、设置 引脚状态
uint8_t stateOfPin5 = sr.get(5);
sr.set(6, stateOfPin5);
Serial.println(stateOfPin5);
delay(2000);
// 直接更新指定的引脚, 不全部更新
sr.setNoUpdate(0, HIGH);
sr.setNoUpdate(1, LOW);
// 需要手动更新缓存数组
sr.updateRegisters();
delay(2000);
}