como cambiar la hora utilizando la libreria time.h

saludos estoy empezando con arduino y ademas de los muchos problemas hoy estoy dando me con una pared.
estoy haciendo un reloj simple como practica en mi primer proyecto la idea es poder cambiar la hora o los minutos pero quede bloqueado no se como hacerlo ( ejemplo mi hora actual es las 12:00 y quiero cambiar a 13 : 00 o si tengo las 12:00 y quiero las 12:22) o sea manipular los minutos las horas, todo por separado estoy trabajando con un mando infrarrojo gracias por su apoyo
mi codigo es:

#include <IRremote.h>
#include <IRremoteInt.h>
#include <Time.h>
#include <TimeLib.h>
// Declaramos la variable del tipo time_t
time_t fecha;

//Conectaremos el sensor infrarrojo a un pin DIGITAL del Arduino, en este caso sera el pin 2
IRrecv sensor(2); //Inicializamos el sensor infrarrojo, poniendo el pin digital 2 como parametro
decode_results lectura; //Variable que va a almacenar la lectura del control infrarrojo
#define RECAL 0x44951B3E
#define CLAV1 0x94F37EE4 // 1
#define CLAV2 0xF61D79DE //2
#define CLAV3 0x81772F84 // 3
#define CLAV4 0x4D91BBBE // 4
#define CLAV5 0xC7695F20 // 5
#define CLAV6 0x8AC8FA2 // 6
#define CLAV7 0x95D2E7E4 // 7
#define CLAV8 0x1353935E // 8
#define CLAV9 0xCC7E81C8 // 9
#define CLAV0 0x23EAE8C2 //0
#define IRME 0xE0E0807F
byte nutem = 0;
byte x=0;
byte xw=0; // variables para claves
byte xy=0;
byte xx=0;
byte xz=0;
void whilon(){ // rutina para recivir datos del control
int x=0;
while(x<50){
if (sensor.decode(&lectura)){ //Si hay una lectura recibida
Serial.println("*"); // se recibio un dato
delay(50);
break; // frenamosy nos vamos
}
x=x+1;
delay(251);
} /// no se recibio datoo
}
void decnu(){
x=0;
byte nutem = 5;
if(lectura.value == CLAV1){
nutem = 1;
}
if(lectura.value == CLAV2){
nutem = 2;
}
if(lectura.value == CLAV3){
nutem = 3;
}
if(lectura.value == CLAV4){
nutem = 4;
}
if(lectura.value == CLAV5){
nutem = 5;
}
if(lectura.value == CLAV6){
nutem = 6;
}
if(lectura.value == CLAV7){
nutem = 7;
}
if(lectura.value == CLAV8){
nutem = 8;
}
if(lectura.value == CLAV9){
nutem = 9;
}
if(lectura.value == CLAV0){
nutem = 0;
}
Serial.println(nutem, DEC);
Serial.println(“numero”);
}
void setup()
{
Serial.begin(9600); //Inicializamos el puerto serial
sensor.enableIRIn(); //Habilitamos el sensor infrarrojo para que pueda recibir lecturas
setTime(12, 32, 0, 13, 12, 2016); // Obtenemos la fecha actual
fecha = now();
}
void loop() // empesamos ???
{
int x=0;
if (sensor.decode(&lectura)){ //Si hay una lectura recibida
if (lectura.value == RECAL){ // es de cLIBRACION
Serial.println(" A J U S T E S");
delay(300);
sensor.resume();
if (IRME == lectura.value){ // es salir
Serial.println(“salir”);
goto quechim;
}
x=0;
xw=0;
Serial.println(" ENTRE CLAVE "); // vamos a entrar clave de calibracion
whilon(); // primer digito
if (IRME == lectura.value){ // es salir
Serial.println(“salir”);
goto quechim;
}
decnu();
if (CLAV1 == lectura.value){
xw=1;
}
sensor.resume();
x=0;
xy=0;
delay(1000);
whilon(); //segundo digito
if (IRME == lectura.value){
Serial.println(“salir”);
goto quechim; // es salir
}
decnu();
if (CLAV9 == lectura.value){
xy=1;
}
sensor.resume();
x=0;
xx=0;
delay(1000);
whilon(); // tercer digito
if (IRME == lectura.value){
Serial.println(“salir”);
goto quechim; // es salir
}
decnu();
if (CLAV2 == lectura.value){
xx=1;
}
sensor.resume();
x=0;
xz=0;
delay(1000);
whilon(); //cuarto digito
if (IRME == lectura.value){
Serial.println(“salir”);
goto quechim; // es salir
delay(50);
}
decnu();
if (CLAV3 == lectura.value){
xz=1;
}
Serial.println(“ya ya ya”);
Serial.println(xw, DEC);
Serial.println(xy, DEC);
Serial.println(xx, DEC);
Serial.println(xz, DEC);
if (xw == 1){
if (xy == 1){
if (xx == 1){
if (xz == 1){
Serial.println(“AJUSTAR EVENTO”);
// AQUI QUIERO PODER CAMBIAR LA HORA O LOS MINUTOS O LOS DIAS ETC. QUEDE VARADO

goto quechim;
}
}
}
}
Serial.println(“CLAVE INCORRECTA”);
}
}
quechim:
sensor.resume();
time_t t = now();
Serial.print(day(t));
Serial.print(+ “/”) ;
Serial.print(month(t));
Serial.print(+ “/”) ;
Serial.print(year(t));
Serial.print( " “) ;
Serial.print(hour(t));
Serial.print(+ “:”) ;
Serial.print(minute(t));
Serial.print(”:") ;
Serial.println(second(t));
delay(1000);

} /// FIN

 //Ponemos hora yfecha inicial, dejar como comentario despues de subir la primera vez
    Wire.begin();
        Clock.setSecond(50);//Set the second 
        Clock.setMinute(59);//Set the minute 
        Clock.setHour(11);  //Set the hour 
        Clock.setDoW(5);    //Set the day of the week
        Clock.setDate(31);  //Set the date of the month
        Clock.setMonth(5);  //Set the month of the year
        Clock.setYear(13);  //Set the year (Last two digits of the year)[code\]

ModeradorPOr favor a los dos, lean las normas del foro y editen sus posteos usando etiquetas de código.
Ningún código o error se pega como texto simple tal como Uds han hecho. Todo va con etiquetas, simplemente naveguen un poco viendo otros hilos.

Toda librería tiene ejemplos, esta en particular te enseña en uno de sus ejemplos como inciar con la hora de la compilación y luego comentarlo para que no lo haga en cada arranque.

Functions for managing the timer services are:

setTime(t); // set the system time to the give time t
setTime(hr,min,sec,day,mnth,yr); // alternative to above, yr is 2 or 4 digit yr
// (2010 or 10 sets year to 2010)
adjustTime(adjustment); // adjust system time by adding the adjustment value
timeStatus(); // indicates if time has been set and recently synchronized
// returns one of the following enumerations:
timeNotSet // the time has never been set, the clock started on Jan 1, 1970
timeNeedsSync // the time had been set but a sync attempt did not succeed
timeSet // the time is set and is synced
Time and Date values are not valid if the status is timeNotSet. Otherwise, values can be used but the returned time may have drifted if the status is timeNeedsSync.

setSyncProvider(getTimeFunction); // set the external time provider
setSyncInterval(interval); // set the number of seconds between re-sync