#define clock 4 //left led
#define data 16 //middle led
#define latch 17 //right led


void shiftReg(int clockpin, int datapin, int latchpin, unsigned char number){
  //alpha male function instead of pussy libraries
  
  int wait = 50;
  char result[8];
  for (int i=0; i<8; i++){ //dzielimy wartosc na bity
    result[i] = number%2;
    number /= 2;
  }

  digitalWrite(clockpin, LOW); //inicjalizacja zeby shift register zaczal sluchac
  digitalWrite(latchpin, LOW);
  delay(wait);
  
  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);
      delay(wait);
      digitalWrite(clockpin, LOW);
      delay(wait);
  }

  digitalWrite(latchpin, HIGH);
  digitalWrite(datapin, LOW); //koniec sluchania, wyswietl

}

void setup() {
  Serial.begin(115200);
  // Serial.println("Hello, ESP32!");
  pinMode(clock, OUTPUT);
  pinMode(latch, OUTPUT);
  pinMode(data, OUTPUT);
}

void loop() {
  //output low to turn segment on
  // unsigned char hexValues[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; 
  //output high to turn segment on
  unsigned char hexValues[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; 
  for (int i=0; i<10; i++){
    shiftReg(clock, data, latch, hexValues[i]);
  }
  delay(500);
}
74HC595