#define Botao 13
#define Led   12
#define t_filtro 5
byte b_bt1;
byte b_led;
byte b_bt1_pressionado;
byte b_filtro1;
byte b_contador;
uint8_t Ch[8];
uint8_t Cm[8];
uint8_t hora[8];
uint8_t minuto[8];
uint8_t horamedi[8];
uint8_t minmedi[8];
// Calculo de Horas e minutos.
// Esta função retorna na matriz horamedi e minmedi valor da hora e minutos após a compensação
void calculaHora(uint8_t Ch, uint8_t Cm, uint8_t hora, uint8_t minuto, uint8_t *valorHora, uint8_t *valorMinuto) {
  *valorHora   = Ch + hora;
  *valorMinuto = Cm + minuto;
  // Correção dos minutos e horas
  if (*valorMinuto >= 60) {
    *valorHora += *valorMinuto / 60; // Soma o resultado da divisão ao valor da Hora
    *valorMinuto %= 60;             // Recebe o resto da divisão, desta forma teremos o valor em minutos.
  }
  // Correção do valor das Horas
  if (*valorHora >= 24) {
    *valorHora %= 24;
  }
}
// Incremento do próximo horário para tomar o remédio
void incrementoDaHora(uint8_t incHora, uint8_t incMinutos, uint8_t *hora, uint8_t *minutos) {
  // Correção dos minutos e horas
  *minutos += incMinutos;
  *hora += incHora;
  if (*minutos >= 60) {
    *hora += *minutos / 60;  // Soma o resultado da divisão ao valor da Hora
    *minutos %= 60;          // Recebe o resto da divisão, desta forma teremos o valor em minutos.
  }
  // Correção do valor das Horas
  if (*hora >= 24) {
    *hora %= 24;
  }
}
void setup() {
  Serial.begin(115200);
  pinMode(Botao, INPUT_PULLUP);
  pinMode(Led, OUTPUT);
  Ch[1] = 20;
  Cm[1] = 30;
  hora[1] = 2;
  minuto[1] = 5;
  calculaHora(Ch[1], Cm[1], hora[1], minuto[1], &horamedi[1], &minmedi[1]);
}
void loop() {
  Serial.println("*********");
  Serial.print("Hora e minutos:");
  Serial.print(horamedi[1]);
  Serial.print(":");
  Serial.println(minmedi[1]);
  incrementoDaHora(hora[1], minuto[1], &horamedi[1], &minmedi[1]); // Próxima hora de tomar o remédio
  delay(1000);
}