Hourly output Cuckoo Clock

I am currently working on a project Cuckoo clock but am stuck with figuring out how to get an output every hour on the hour to energize a relay

I am using an 8 digit 7 segment all in one unit
The clock part is working fine I just want a signal on pin 8 ( see sketch) every hour to energize a relay

Sketch I have so far

#include <Wire.h>
#include <RTClib.h>
#include <LedControl.h>
int Alarm=8;


//=======================================================================================
// data pin, clock, latch
double hold;
LedControl lc = LedControl(4, 2, 3, 1);
RTC_DS1307 rtc;
//========================================================================================
void setup() {
Wire.begin();
 rtc.begin(); 
pinMode(Alarm,OUTPUT);
rtc.begin();
lc.shutdown(0, false);
lc.setIntensity(0, 8); // display brightness
lc.clearDisplay(0); // erase display
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //set clock as computer clock
//rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));

}
//========================================================================================
void loop() 

{


hold = millis();
while ((hold + 15000) > millis() ) {
DateTime now = rtc.now();
setCol1(now.hour());
setCol2(now.minute());
setCol3(now.second());
lc.setChar (0, 2, '-', false);
lc.setChar (0, 5, '-', false);


hold = millis();
while ((hold + 3000) > millis() ) {
DateTime now = rtc.now();
setCol1(now.month());
setCol2(now.day());
setCol3(now.year() - 2000);
lc.setChar (0, 2, '-', false);
lc.setChar (0, 5, '-', false);
}

}

void setCol3 (byte jam) {
String strBuffer = Konversi(jam);
byte pjg = strBuffer.length() + 1;
char val[pjg];
strBuffer.toCharArray(val, pjg);
lc.setChar (0, 1, val[0], false);
lc.setChar (0, 0, val[1], false);
}
//========================================================================================
void setCol2 (byte mnt) {
String strBuffer = Konversi(mnt);
byte pjg = strBuffer.length() + 1;
char val[pjg];
strBuffer.toCharArray(val, pjg);
lc.setChar (0, 4, val[0], false);
lc.setChar (0, 3, val[1], false);

}


void setCol1 (byte dtk) {
String strBuffer = Konversi(dtk);
byte pjg = strBuffer.length() + 1;
char val[pjg];
strBuffer.toCharArray(val, pjg);
lc.setChar (0, 7, val[0], false);
lc.setChar (0, 6, val[1], false);
}
String Konversi(int nilai) {
if (nilai < 10) {
return "0" + String(nilai);
}
else {
return String(nilai);
}

}

Any help is greatly appreciated

Pb

Please edit your post to add code tags, as described in How to use this forum.

You have the hour. Check to see if it changes, and do something then.

@Bentech, jremington asked you to EDIT your post, not create a whole new one.

I've deleted your other cross-post .

Cross-posting is against the rules of the forum. The reason is that duplicate posts can waste the time of the people trying to help. Someone might spend 15 minutes (or more) writing a detailed answer on this topic, without knowing that someone else already did the same in the other topic.

Repeated cross-posting will result in a suspension from the forum.

In the future, please take some time to pick the forum board that best suits the topic of your question and then only post once to that forum board. This is basic forum etiquette, as explained in the sticky "How to use this forum - please read." post you will find at the top of every forum board. It contains a lot of other useful information. Please read it.

Thanks in advance for your cooperation.