const uint8_t LATCH = 2;
const uint8_t SER = 4;
const uint8_t CLK = 7;
const uint8_t PWM_PIN = 5;
void init_transfer_2_shift_reg(uint8_t LATCH, uint8_t SER, uint8_t CLK){
pinMode(LATCH, OUTPUT);
pinMode(SER, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(PWM_PIN, OUTPUT);
}
void transfer_2_shift_reg(uint8_t LATCH, uint8_t SER, uint8_t CLK, uint8_t dataSlow, uint8_t dataHigh){
digitalWrite(LATCH, LOW);
shiftOut(SER, CLK, MSBFIRST, dataSlow);
shiftOut(SER, CLK, MSBFIRST, dataHigh);
digitalWrite(LATCH, HIGH);
}
void tranfer_num_2_shift_reg(uint8_t num, uint8_t LATCH, uint8_t SER, uint8_t CLK){
static const uint8_t DIGITS[] = {
0b01101111,
0b00001001,
0b01010111,
0b01011101,
0b00111001,
0b01111100,
0b01111110,
0b01001001,
0b01111111,
0b01111101,
};
uint8_t digit_0 = num % 10;
uint8_t digit_1 = num / 10;
transfer_2_shift_reg(LATCH, SER, CLK, DIGITS[digit_0], DIGITS[digit_1]);
}
void setup() {
init_transfer_2_shift_reg(LATCH, SER, CLK);
}
void loop() {
analogWrite(PWM_PIN, 125);
for(uint8_t i = 0; i < 100; i++){
tranfer_num_2_shift_reg(i, LATCH, SER, CLK);
delay(500);
}
}