


int SecondsController();
int MinutesController();
int HoursController();

int static WAIT_MILLISECONDS = 1;
int static INITIAL_HOUR = 0;
int static INITIAL_MINUTE = 0;
int static INITIAL_SECONDS = 0;

int static HOURS_PINS[] = {1,2,3,4,5,6};
int static MINUTES_PINS[] = {6,7,8,9,10,11,12};

int seconds = 0;
int minutes = 0;
int hours = 0;
unsigned long currentMillis = 0;
unsigned long previousMillis=0;
int binarySeconds[] = {0,0,0,0,0,0};
int binaryHandler[] = {0,0,0,0,0,0};
int binaryMinutes[] = {0,0,0,0,0,0};
int binaryHours[] = {0,0,0,0,0,0};

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  seconds = INITIAL_SECONDS;
  minutes = INITIAL_MINUTE;
  hours = INITIAL_HOUR;

  for(int i = 6; i>0; i--){
    pinMode(HOURS_PINS[i], OUTPUT);
  }

  for(int i = 6; i>0; i--){
    pinMode(MINUTES_PINS[i], OUTPUT);
  }

}

void loop() {
  // put your main code here, to run repeatedly:

  HoursController();
  
}

int SecondsController(){  

  currentMillis++;
  delay(WAIT_MILLISECONDS);
  

  if(currentMillis % 1000 == 0){
    seconds++;
    currentMillis = 0;
    
    Serial.print(hours);
    Serial.print(":");
    Serial.print(minutes);
    Serial.print(":");
    Serial.print(seconds);
    Serial.print("\n");    

    DecimalToBinary(hours, binaryHours, 6);  
    Serial.print(":");
    DecimalToBinary(minutes,binaryMinutes, 6);  
    Serial.print(":");
    DecimalToBinary(seconds, binarySeconds, 6);  
    Serial.print("\n");          

    MatrixDriver(seconds, HOURS_PINS);
  

    Serial.flush();
  }
  
  return seconds;

}

int MinutesController(){

 if(SecondsController() == 60){
    seconds = 0;
    minutes += 1;
        
    
 }
  return minutes;

}


int HoursController(){

if(MinutesController() == 59){
    hours += 1;
    minutes = 0;    
    
 }

  if(hours >= 24){
    hours = 0;
    minutes = 0;
    seconds = 0;

   
    
  }

 return hours;
}

int DecimalToBinary(int decimal, int binaryArray[], int arrayLength){

  if(decimal <= 0 ){
    for(int i= arrayLength; i > 0 ;i--){  
      binaryArray[i] = 0; 
    }
  }
  
  for(int i=1; i < arrayLength ;i++){        
  
    if(decimal == 0){
      binaryArray[i] = 0;
    }else{
      binaryArray[i]=decimal%2;    
      decimal=decimal/2;    
    } 
  
  
  }  
  
  for(int i=6; i > 0; i--)    
  {    
    Serial.print(binaryArray[i]);
    
  }    
  
  return binaryArray;

}


void MatrixDriver(int binaryArray[], int ledMatrixArray[]){
  for (int i = 0; i < 6; i++){
    digitalWrite(ledMatrixArray[i],binaryArray[i] );
  }
}
