#define clock 4
#define data 16
#define latch 17
#define cyfry 1 // ilosc 7-segmentowek
void intToBCD (int input, unsigned char *output){
for (int i=0; i<cyfry; i++){ //ile cyfr w liczbie możemy wyświetlić
output[i] = input%10; // modulo 10 zwraca cyfre jednosci
input /= 10; //dzielac przez 10 w nastepnej iteracji cyfra dziesiatek stanie się jednosciami
}
}
void BCDToHEX(unsigned char *input, unsigned char *output){
unsigned char hexValues[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; //bez kropki
for (int i=0; i<cyfry; i++){ //tutaj są tylko zakodowane które segmenty powinny się świecić dla której cyfry
output[i] = hexValues[input[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);
digitalWrite(5, HIGH);
digitalWrite(18, LOW);
}
}
void shiftReg(int clockpin, int datapin, int latchpin, int number){
//alpha male function instead of pussy libraries
unsigned char osobne[cyfry]; //moze przechowac 8 integerow
intToBCD(number, osobne); //dzieli duzego int na osobne cyfry
unsigned char binarka[cyfry]; //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[cyfry]; // przechowuje cyfry jednego integera
for (int i = 0; i < cyfry; 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);
pinMode(5, OUTPUT);
pinMode(18, OUTPUT);
int x = 0;
shiftReg(clock, data, latch, x);
}
int x = 0;
void loop() {
int x=0;
while(1){
x+=1;
shiftReg(clock, data, latch, x);
delay(1000);
}
delay(10);
}