#define clock 4 //left led
#define data 16 //middle led
#define latch 17 //right led
void intToBCD (int input, unsigned char *result){
for (int i=0; i<8; i++){
result[i] = input%10;
input /= 10;
// printf("result[%d] = %d\n",i,result[i]);
}
}
void BCDToHEX(unsigned char *bcd, unsigned char *disp){
unsigned char hexValues[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
for (int i=0; i<8; i++){
disp[i] = hexValues[bcd[i]];
// printf("disp[%d] = 0x%02x\n",i,disp[i]);
}
}
void HEXToBits(unsigned char hex, unsigned char *bity){
for (int i=0; i<8; i++){ //dzielimy wartosc na bity
bity[i] = hex%2;
hex /= 2;
}
}
void dataOut (int clockpin, int datapin, unsigned char *result){
for (int i = 0; i<8; i++){ //podawanie pojedynczych bitow na data i synchro z clock
int state;
(result[7-i] == 1) ? state = 1 : state = 0;
digitalWrite(datapin, state);
digitalWrite(clockpin, HIGH);
digitalWrite(clockpin, LOW);
}
}
void shiftReg(int clockpin, int datapin, int latchpin, int number){
//alpha male function instead of pussy libraries
unsigned char osobne[8]; //moze przechowac 8 integerow
intToBCD(number, osobne); //dzieli duzego int na osobne cyfry
unsigned char binarka[8]; //przechowuje 8 hexow
BCDToHEX(osobne,binarka); //przypisuje hexy osobnym cyfrom
digitalWrite(clock, LOW); //inicjalizacja zeby shift register zaczal sluchac
digitalWrite(latch, LOW);
unsigned char result[8]; // przechowuje binarna wartosc jednego integera
for (int i = 0; i < 2; i++){
HEXToBits(binarka[i], result); //converts hex value into singular bits to be later displayed
dataOut(clockpin, datapin, result);
}
digitalWrite(latch, HIGH);
digitalWrite(data, LOW); //koniec sluchania, wyswietl
}
void setup() {
Serial.begin(115200);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
pinMode(data, OUTPUT);
int x = 0;
shiftReg(clock, data, latch, x);
}
int x = 0;
void loop() {
int x=0;
while(1){
shiftReg(clock, data, latch, x);
x+=1;
delay(1000);
}
delay(10);
}