Domino Clock

So no matter whether it would work or not, I had too much time so finished the code with a little bit of explanation.
I decided to use three shift register arrays so i can independantly change the displays.
The minute part is fairly long :slight_smile:

#include <Time.h>

//shift register array for hour stone
int latchPin1 = 8;
int clockPin1 = 12;
int dataPin1 = 11;

//shift register array for first minute stone
int latchPin2 = 2;
int clockPin2 = 4;
int dataPin2 = 3;

//shift register array for second minute stone
int latchPin3 = 5;
int clockPin3 = 7;
int dataPin3 = 6;

//hour and minute adjust buttons
const int hourPin = 9;
const int minPin = 10;

int hourState = 0;
int minState = 0;

byte dataArray[12];

void setup() {

pinMode(latchPin1, OUTPUT);
pinMode(clockPin1, OUTPUT);
pinMode(dataPin1, OUTPUT);

pinMode(latchPin2, OUTPUT);
pinMode(clockPin2, OUTPUT);
pinMode(dataPin2, OUTPUT);

pinMode(latchPin3, OUTPUT);
pinMode(clockPin3, OUTPUT);
pinMode(dataPin3, OUTPUT);

pinMode(hourPin, INPUT);
pinMode(minPin, INPUT);

     //Matrix bits
dataArray[1] = 1024; //000000000000010000000000
dataArray[2] = 525312; //000010000000010000000000
dataArray[3] = 540736; //000010000100000001000000
dataArray[4] = 8437824; //100000001100000001000000
dataArray[5] = 8438848; //100000001100010001000000
dataArray[6] = 8963136; //100010001100010001000000
dataArray[7] = 8966464; //100010001101000101000000
dataArray[8] = 10670400; //101000101101000101000000
dataArray[9] = 10671424; //101000101101010101000000
dataArray[10] = 11195712; //101010101101010101000000
dataArray[11] = 11197248; //101010101101101101000000
dataArray[12] = 11983680; //101101101101101101000000


}

void loop() {

hourState = digitalRead(hourPin);
minState = digitalRead(minPin);

//Hour adjustment
if (hourState == HIGH) {
  time_t t = now();
  t = t + 3600;
  setTime(t);
}
//Minute adjustment
if (minState == HIGH) {
  time_t t = now();
  t = t + 60;
  setTime(t);
}
//Hour stone output
if (hourFormat12() == 1) {
  digitalWrite(latchPin1, LOW);
  shiftOut(dataPin1, clockPin1, MSBFIRST, dataArray[1]);
  digitalWrite(latchPin1, HIGH);
}
if (hourFormat12() == 2) {
  digitalWrite(latchPin1, LOW);
  shiftOut(dataPin1, clockPin1, MSBFIRST, dataArray[2]);
  digitalWrite(latchPin1, HIGH);
}
if (hourFormat12() == 3) {
  digitalWrite(latchPin1, LOW);
  shiftOut(dataPin1, clockPin1, MSBFIRST, dataArray[3]);
  digitalWrite(latchPin1, HIGH);
}
if (hourFormat12() == 4) {
  digitalWrite(latchPin1, LOW);
  shiftOut(dataPin1, clockPin1, MSBFIRST, dataArray[4]);
  digitalWrite(latchPin1, HIGH);
}
if (hourFormat12() == 5) {
  digitalWrite(latchPin1, LOW);
  shiftOut(dataPin1, clockPin1, MSBFIRST, dataArray[5]);
  digitalWrite(latchPin1, HIGH);
}
if (hourFormat12() == 6) {
  digitalWrite(latchPin1, LOW);
  shiftOut(dataPin1, clockPin1, MSBFIRST, dataArray[6]);
  digitalWrite(latchPin1, HIGH);
}
if (hourFormat12() == 7) {
  digitalWrite(latchPin1, LOW);
  shiftOut(dataPin1, clockPin1, MSBFIRST, dataArray[7]);
  digitalWrite(latchPin1, HIGH);
}
if (hourFormat12() == 8) {
  digitalWrite(latchPin1, LOW);
  shiftOut(dataPin1, clockPin1, MSBFIRST, dataArray[8]);
  digitalWrite(latchPin1, HIGH);
}
if (hourFormat12() == 9) {
  digitalWrite(latchPin1, LOW);
  shiftOut(dataPin1, clockPin1, MSBFIRST, dataArray[9]);
  digitalWrite(latchPin1, HIGH);
}
if (hourFormat12() == 10) {
  digitalWrite(latchPin1, LOW);
  shiftOut(dataPin1, clockPin1, MSBFIRST, dataArray[10]);
  digitalWrite(latchPin1, HIGH);
}
if (hourFormat12() == 11) {
  digitalWrite(latchPin1, LOW);
  shiftOut(dataPin1, clockPin1, MSBFIRST, dataArray[11]);
  digitalWrite(latchPin1, HIGH);
}
if (hourFormat12() == 12) {
  digitalWrite(latchPin1, LOW);
  shiftOut(dataPin1, clockPin1, MSBFIRST, dataArray[12]);
  digitalWrite(latchPin1, HIGH);
}
//Minute stones output
if (minute() == 0) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, 0);
  shiftOut(dataPin3, clockPin3, MSBFIRST, 0);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 1) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, 0);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[1]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 2) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, 0);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[2]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 3) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, 0);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[3]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 4) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, 0);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[4]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 5) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, 0);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[5]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 6) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, 0);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[6]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 7) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, 0);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[7]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 8) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, 0);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[8]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 9) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, 0);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[9]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 10) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, dataArray[1]);
  shiftOut(dataPin3, clockPin3, MSBFIRST, 0);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 11) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, dataArray[1]);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[1]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 12) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, dataArray[1]);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[2]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 13) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, dataArray[1]);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[3]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 14) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, dataArray[1]);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[4]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 15) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, dataArray[1]);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[5]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 16) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, dataArray[1]);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[6]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 17) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, dataArray[1]);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[7]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 18) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, dataArray[1]);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[8]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 19) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, dataArray[1]);
  shiftOut(dataPin3, clockPin3, MSBFIRST, dataArray[9]);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
if (minute() == 20) {
  digitalWrite(latchPin2, LOW);
  digitalWrite(latchPin3, LOW);
  shiftOut(dataPin2, clockPin2, MSBFIRST, dataArray[2]);
  shiftOut(dataPin3, clockPin3, MSBFIRST, 0);
  digitalWrite(latchPin2, HIGH);
  digitalWrite(latchPin3, HIGH);
}
 etc...