Alarm clock project time problem.

Hello, i am currently working in a ardunio alarm clock project without and rtc for school. I have a problem with my hr not increasing and my conditionals. i will post the code so could i get some help plz.
thank you in advance.

#include <Time.h>
#include <TimeLib.h>
#include <Wire.h>
#include <Adafruit_RGBLCDShield.h>
#include <utility/Adafruit_MCP23017.h>
#include <EEPROM.h>
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();


const int numofMenus = 4;
int currentMenu = 0;
String menu[4][2] = {{"Set hour", "hr"}, {"Set minutes", "min"}, {"Set alarm", "o"}, {"Current Time", "ha"}};
int parameters[24];

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.noBlink();


}

void loop() {
  inputAction();

  if (currentMenu == 0)
  {
    printScreen();
  }
  if (currentMenu == 1)
  {
    printScreen();

  }
  if (currentMenu == 2)
  {
    printScreen();
  }
  if (currentMenu == 3)
  {

    int hr = parameters[0];
    int mn = minute(parameters[1]);
    int sec = second();
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Time: ");
    if (parameters[1] >= 0 && parameters[1] <= 59 && sec < 59) {
      printtime(parameters[0]);
    }
    else if (parameters[1] == 59 && sec == 59) {
      if (parameters[0]>=0 && parameters[0]<24){
      printtime(parameters[0]++);
      //delay(1000);}
      /*else if (parameters[0] == 24){
        parameters[0]= 0;
         printtime(parameters[0]);
        }*/
      }
    }
    lcd.print(":");
    if (sec >= 0 && sec < 59) {
      printtime(parameters[1]);
    }
    else if (sec == 59) {
      parameters[1];
      printtime(parameters[1]++);
      delay(1000);
    }
    lcd.print(":");
    printtime(sec);
    /* if (sec == 60) {
       mn+1;
       lcd.clear();
       lcd.setCursor(0, 0);
       lcd.print("Time: ");
       printtime(hr);
       lcd.print(":");
       printtime(mn);
       lcd.print(":");
       printtime(sec);
      }
      if (mn == 60) {
       hr+1;
       lcd.clear();
       lcd.setCursor(0, 0);
       lcd.print("Time: ");
       printtime(hr);
       lcd.print(":");
       printtime(mn);
       lcd.print(":");
       printtime(sec);
      }*/

    delay (100);

  }
}





void inputAction() {
  uint8_t buttons = lcd.readButtons();

  if (buttons & BUTTON_UP) {
    if (currentMenu == 0) {
      currentMenu = numofMenus - 1;
    } else {
      currentMenu--;
    }
  } else if (buttons & BUTTON_DOWN) {
    if (currentMenu == numofMenus - 1) {
      currentMenu = 0;
    } else {
      currentMenu++;
    }
  } else if (buttons & BUTTON_RIGHT) {
    parameters[currentMenu]++;
  } else if (buttons & BUTTON_LEFT) {
    parameters[currentMenu]--;
  }

}

void printScreen() {
  lcd.clear();
  lcd.print(menu[currentMenu][0]);
  lcd.setCursor(0, 1);
  lcd.print(parameters[currentMenu]);
  lcd.print(" ");
  lcd.print(menu[currentMenu][1]);
  delay(100);
}

void printtime(int data) {
  if (data >= 0 && data < 10) {
    lcd.print('0');
  }
  lcd.print(data);
}

To exlpain the code problem properly. in this part of the code i am trying to clear a condition in which it checks if the minute has reached 59 minutes and 59 second which then adds 1 to the hour. But instead what i get is that the hour just disappear and the minute increase to 60 instead of resetting back to zero. Any help or suggestions would be appreciated. This is litterally one of the last bit i have left to do on this project which i have to submit in 11 days.

 if (currentMenu == 3)
  {

    int hr = parameters[0];
    int mn = minute(parameters[1]);
    int sec = second();
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Time: ");
    if (parameters[1] >= 0 && parameters[1] <= 59 && sec < 59) {
      printtime(parameters[0]);
    }
    else if (parameters[1] == 59 && sec == 59) {
      if (parameters[0]>=0 && parameters[0]<24){
      printtime(parameters[0]++);
      //delay(1000);}
      /*else if (parameters[0] == 24){
        parameters[0]= 0;
         printtime(parameters[0]);
        }*/
      }
    }
    lcd.print(":");
    if (sec >= 0 && sec < 59) {
      printtime(parameters[1]);
    }
    else if (sec == 59) {
      parameters[1];
      printtime(parameters[1]++);
      delay(1000);
    }
    lcd.print(":");
    printtime(sec);
    /* if (sec == 60) {
       mn+1;
       lcd.clear();
       lcd.setCursor(0, 0);
       lcd.print("Time: ");
       printtime(hr);
       lcd.print(":");
       printtime(mn);
       lcd.print(":");
       printtime(sec);
      }
      if (mn == 60) {
       hr+1;
       lcd.clear();
       lcd.setCursor(0, 0);
       lcd.print("Time: ");
       printtime(hr);
       lcd.print(":");
       printtime(mn);
       lcd.print(":");
       printtime(sec);
      }*/

    delay (100);

  }
}

Hello I am using setTime() with variable.
E.g setTime(var1,var2,0, 18,08,18)
When I am doing this in my loop it seems the variables I set is causing the timer to stop. Any help would be appreciated. In this project I got multiple menus which changes var1 and var2 but the timer doesn't start.

Please post a full program that demonstrates the problem.

Hello this is the part of the code that i have a problem with

  if (currentMenu == 3)
  {
  setTime(parameters[0],parameters[1],0, 29,8,2018);
    

 /* long rtcSeconds = millis() / 1000;
  
  int seconds = (int) (rtcSeconds % 60);  // Range 0 . 59  units: Secs
  long rtcminuteinseconds = parameters[1] * seconds;
  int minutes = (int)(((rtcminuteinseconds - seconds) / 60) % 60);   // Range 0 . 59  units: Mins
  int hours =   (int) (((rtcSeconds -  minutes*60 - seconds) / (3600)) % 24);   // Range 0 . 23 units: Hrs
  */
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Time: ");
    if (minute() >= 0 && minute() <= 59 && second() < 59) {
      parameters[0];
      printtime(parameters[0]);
    }
    else if (minute() == 59 && second() == 59) {
      if (parameters[0]>=0 && parameters[0]<24){
        parameters[0];
      printtime(parameters[0]++);
      //delay(1000);}
      /*else if (parameters[0] == 24){
        parameters[0]= 0;
         printtime(parameters[0]);
        }*/
      }
    }
    lcd.print(":");
    if (second() >= 0 && second() < 59) {
      printtime(parameters[1]);
    }
    else if (second() == 59) {
      int increasedminute = parameters[1]++;
      int checkminute = (int) (increasedminute % 60);
      printtime(checkminute);
      delay(1000);
    }
    lcd.print(":");
    printtime(second());
    delay (100);

  }
}

Full code i am using sorry for 5 minute delay because of the post restriction.

#include <Time.h>
#include <TimeLib.h>
#include <Wire.h>
#include <Adafruit_RGBLCDShield.h>
#include <utility/Adafruit_MCP23017.h>
#include <EEPROM.h>
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();


const int numofMenus = 4;
int currentMenu = 0;
String menu[4][2] = {{"Set hour", "hr"}, {"Set minutes", "min"}, {"Set alarm", "o"}, {"Current Time", "ha"}};
int parameters[24];

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.noBlink();


}

void loop() {
  inputAction();

  if (currentMenu == 0)
  {
    printScreen();
  }
  if (currentMenu == 1)
  {
    printScreen();

  }
  if (currentMenu == 2)
  {
    printScreen();
  }
  if (currentMenu == 3)
  {
  setTime(parameters[0],parameter[1],0, 29,08,2018);
    

 /* long rtcSeconds = millis() / 1000;
  
  int seconds = (int) (rtcSeconds % 60);  // Range 0 . 59  units: Secs
  long rtcminuteinseconds = parameters[1] * seconds;
  int minutes = (int)(((rtcminuteinseconds - seconds) / 60) % 60);   // Range 0 . 59  units: Mins
  int hours =   (int) (((rtcSeconds -  minutes*60 - seconds) / (3600)) % 24);   // Range 0 . 23 units: Hrs
  */
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Time: ");
    if (minute() >= 0 && minute() <= 59 && second() < 59) {
      parameters[0];
      printtime(parameters[0]);
    }
    else if (minute() == 59 && second() == 59) {
      if (parameters[0]>=0 && parameters[0]<24){
        parameters[0];
      printtime(parameters[0]++);
      //delay(1000);}
      /*else if (parameters[0] == 24){
        parameters[0]= 0;
         printtime(parameters[0]);
        }*/
      }
    }
    lcd.print(":");
    if (second() >= 0 && second() < 59) {
      printtime(parameters[1]);
    }
    else if (second() == 59) {
      int increasedminute = parameters[1]++;
      int checkminute = (int) (increasedminute % 60);
      printtime(checkminute);
      delay(1000);
    }
    lcd.print(":");
    printtime(second());
    delay (100);

  }
}





void inputAction() {
  uint8_t buttons = lcd.readButtons();

  if (buttons & BUTTON_UP) {
    if (currentMenu == 0) {
      currentMenu = numofMenus - 1;
    } else {
      currentMenu--;
    }
  } else if (buttons & BUTTON_DOWN) {
    if (currentMenu == numofMenus - 1) {
      currentMenu = 0;
    } else {
      currentMenu++;
    }
  } else if (buttons & BUTTON_RIGHT) {
    parameters[currentMenu]++;
  } else if (buttons & BUTTON_LEFT) {
    parameters[currentMenu]--;
  }

}

void printScreen() {
  lcd.clear();
  lcd.print(menu[currentMenu][0]);
  lcd.setCursor(0, 1);
  lcd.print(parameters[currentMenu]);
  lcd.print(" ");
  lcd.print(menu[currentMenu][1]);
  delay(100);
}

void printtime(int data) {
  if (data >= 0 && data < 10) {
    lcd.print('0');
  }
  lcd.print(data);
}
    if (minute() >= 0 && minute() <= 59 && second() < 59)
    {
      parameters[0];  //<<<<<<<<<what is this line intended to do ?

oh in there was a different code which made that a variable sorry forgot to delete it

Hello,

without reading every line of your code I recognize, you are implementing a lot of logic, to keep track of all the time elements (hours, minutes, etc)

I have done clocks myself and found it much more easer to take a reference time and use the progress of the millis() counter to forward the time.

reference_to_system = millis();
reference_time=<the current time expressed in milliseconds since 0:00 of the day>

To display the the current time later I only calculate the difference between my reference and the progressing millis()

current_time_in_millis=(millis()-reference_to_system+reference_time)%(246060*1000);

To show the time, i extract the fractions of minute and hours from the current_time_in_millis value.

hour=(current_time_in_millis/3600000)%24;
minute=(current_time_in_millis/60000)%60;
second=(current_time_in_millis/1000)%60;

To adjust the time I add, subtract the number of milliseconds to my reference_time according to the operation
(+ 1 hour = +3600000)

With this pattern, I dont need any logic to follow all the minutes and second overflows. I dont even have to guarantee, that my code will be executed every a second.

ElBanquo i tried that way but in my code i have to have multiple menu which set time. I will be tested on different time. yes the way you showed work as i did but if i do it with setTime() without the logic it just doesnt start when i set different hr.