Here is a complete code (still work in progress):
/*
pin 2 - segment C
pin 3 - segment D
pin 4 - segment E
pin 5 - speaker
pin 6 - segment F
pin 7 - segment A
pin 8 - segment B
pin 9 - segment G
pin 10 - display 1
pin 11 - display 2
pin 12 - display 3
pin 13 - display 4
pin 14 (analog 0) - temp_data
pin 15 (analog 1) - temp_clk
pin 16 (analog 2) - LED
pin 17 (analog 3) - SW3
pin 18 (analog 4) - SW2
pin 19 (analog 5) - SW1
*/
#include <MsTimer2.h>
#include <Time.h>
#define seg_A 7
#define seg_B 8
#define seg_C 2
#define seg_D 3
#define seg_E 4
#define seg_F 6
#define seg_G 9
#define displayPin1 10
#define displayPin2 11
#define displayPin3 12
#define displayPin4 13
#define SW1 19
#define SW2 18
#define SW3 17
#define LED 16
char display1_char = 'x';
char display2_char = 'x';
char display3_char = 'x';
char display4_char = 'x';
int lastRefreshed = 1;
int lastPin;
boolean freshBoot = true;
void loading()
{
writeToDisplay('x', displayPin1); //clear display 1
writeToDisplay('x', displayPin2); //clear display 2
writeToDisplay('x', displayPin3); //clear display 3
writeToDisplay('x', displayPin4); //clear display 4
writeToDisplay('-', displayPin1);
delay(1500);
writeToDisplay('-', displayPin2);
delay(1500);
writeToDisplay('-', displayPin3);
delay(1500);
writeToDisplay('-', displayPin4);
delay(1000);
}
//Funkcija nastavi uro
void setMyTime()
{
writeToDisplay('x', displayPin1); //clear display 1
writeToDisplay('x', displayPin2); //clear display 2
writeToDisplay('x', displayPin3); //clear display 3
writeToDisplay('x', displayPin4); //clear display 4
int onScreen = 0;
char temp[2];
char hours[3];
char minutes[3];
writeToDisplay('_', displayPin1);
while (digitalRead(SW1) != HIGH)
{
if (onScreen == 3)
{
onScreen = 0;
}
if (digitalRead(SW2) == HIGH)
{
itoa(onScreen, temp, 10);
writeToDisplay(temp[0], displayPin1);
onScreen++;
delay(100);
}
}
hours[0] = temp[0];
writeToDisplay('x', displayPin1);
onScreen = 0;
delay(400);
writeToDisplay('_', displayPin2);
while (digitalRead(SW1) != HIGH)
{
if (onScreen == 10)
{
onScreen = 0;
}
if (digitalRead(SW2) == HIGH)
{
itoa(onScreen, temp, 10);
writeToDisplay(temp[0], displayPin2);
onScreen++;
delay(100);
}
}
hours[1] = temp[0];
writeToDisplay('x', displayPin2);
onScreen = 0;
delay(400);
writeToDisplay('_', displayPin3);
while (digitalRead(SW1) != HIGH)
{
if (onScreen == 6)
{
onScreen = 0;
}
if (digitalRead(SW2) == HIGH)
{
itoa(onScreen, temp, 10);
writeToDisplay(temp[0], displayPin3);
onScreen++;
delay(100);
}
}
minutes[0] = temp[0];
writeToDisplay('x', displayPin3);
onScreen = 0;
delay(400);
writeToDisplay('_', displayPin4);
while (digitalRead(SW1) != HIGH)
{
if (onScreen == 10)
{
onScreen = 0;
}
if (digitalRead(SW2) == HIGH)
{
itoa(onScreen, temp, 10);
writeToDisplay(temp[0], displayPin4);
onScreen++;
delay(100);
}
}
minutes[1] = temp[0];
writeToDisplay('x', displayPin4);
delay(400);
hours[3] = '\0';
minutes[3] = '\0';
int hrs = atoi(hours);
int mins = atoi(minutes);
setTime(hrs,mins,0,1,1,2010);
}
void printTime()
{
MsTimer2::stop();
time_t curr_time = now();
int hours = hour(curr_time);
int minutes = minute(curr_time);
char hours_temp[2];
char minutes_temp[2];
itoa (hours, hours_temp, 10);
itoa (minutes, minutes_temp, 10);
if (hours < 10)
{
char temp = hours_temp[0];
hours_temp[0] = '0';
hours_temp[1] = temp;
}
if (minutes < 10)
{
char temp = minutes_temp[0];
minutes_temp[0] = '0';
minutes_temp[1] = temp;
}
writeToDisplay(hours_temp[0], displayPin1);
writeToDisplay(hours_temp[1], displayPin2);
writeToDisplay(minutes_temp[0], displayPin3);
writeToDisplay(minutes_temp[1], displayPin4);
MsTimer2::start();
}
void displayRefresh()
{
MsTimer2::stop();
switch (lastRefreshed)
{
case 1: writeToDisplay(display1_char, displayPin1); break;
case 2: writeToDisplay(display2_char, displayPin2); break;
case 3: writeToDisplay(display3_char, displayPin3); break;
case 4: writeToDisplay(display4_char, displayPin4); break;
}
if (lastRefreshed < 4)
{
lastRefreshed++;
}
else
{
lastRefreshed = 1;
}
MsTimer2::start();
}
void writeToDisplay (char character, int displayPin)
{
switch (displayPin)
{
case displayPin1: display1_char = character; break;
case displayPin2: display2_char = character; break;
case displayPin3: display3_char = character; break;
case displayPin4: display4_char = character; break;
}
digitalWrite(lastPin, LOW);
lastPin = displayPin;
digitalWrite(displayPin, HIGH);
digitalWrite(seg_A, LOW);
digitalWrite(seg_B, LOW);
digitalWrite(seg_C, LOW);
digitalWrite(seg_D, LOW);
digitalWrite(seg_E, LOW);
digitalWrite(seg_F, LOW);
digitalWrite(seg_G, LOW);
if (character == '1')
{
digitalWrite(seg_B, HIGH);
digitalWrite(seg_C, HIGH);
}
else if (character == '2')
{
digitalWrite(seg_A, HIGH);
digitalWrite(seg_B, HIGH);
digitalWrite(seg_G, HIGH);
digitalWrite(seg_E, HIGH);
digitalWrite(seg_D, HIGH);
}
else if (character == '3')
{
digitalWrite(seg_A, HIGH);
digitalWrite(seg_B, HIGH);
digitalWrite(seg_C, HIGH);
digitalWrite(seg_D, HIGH);
digitalWrite(seg_G, HIGH);
}
else if (character == '4')
{
digitalWrite(seg_B, HIGH);
digitalWrite(seg_C, HIGH);
digitalWrite(seg_F, HIGH);
digitalWrite(seg_G, HIGH);
}
else if (character == '5')
{
digitalWrite(seg_A, HIGH);
digitalWrite(seg_C, HIGH);
digitalWrite(seg_D, HIGH);
digitalWrite(seg_F, HIGH);
digitalWrite(seg_G, HIGH);
}
else if (character == '6')
{
digitalWrite(seg_A, HIGH);
digitalWrite(seg_C, HIGH);
digitalWrite(seg_D, HIGH);
digitalWrite(seg_F, HIGH);
digitalWrite(seg_G, HIGH);
digitalWrite(seg_E, HIGH);
}
else if (character == '7')
{
digitalWrite(seg_A, HIGH);
digitalWrite(seg_B, HIGH);
digitalWrite(seg_C, HIGH);
}
else if (character == '8')
{
digitalWrite(seg_A, HIGH);
digitalWrite(seg_B, HIGH);
digitalWrite(seg_C, HIGH);
digitalWrite(seg_D, HIGH);
digitalWrite(seg_E, HIGH);
digitalWrite(seg_F, HIGH);
digitalWrite(seg_G, HIGH);
}
else if (character == '9')
{
digitalWrite(seg_A, HIGH);
digitalWrite(seg_B, HIGH);
digitalWrite(seg_C, HIGH);
digitalWrite(seg_D, HIGH);
digitalWrite(seg_F, HIGH);
digitalWrite(seg_G, HIGH);
}
else if (character == '0')
{
digitalWrite(seg_A, HIGH);
digitalWrite(seg_B, HIGH);
digitalWrite(seg_C, HIGH);
digitalWrite(seg_D, HIGH);
digitalWrite(seg_E, HIGH);
digitalWrite(seg_F, HIGH);
}
else if (character == 'x')
{
digitalWrite(seg_A, LOW);
digitalWrite(seg_B, LOW);
digitalWrite(seg_C, LOW);
digitalWrite(seg_D, LOW);
digitalWrite(seg_E, LOW);
digitalWrite(seg_F, LOW);
digitalWrite(seg_G, LOW);
}
else if (character == '-')
{
digitalWrite(seg_G, HIGH);
}
else if (character == '_')
{
digitalWrite(seg_D, HIGH);
}
}
void setup()
{
pinMode(seg_A, OUTPUT);
pinMode(seg_B, OUTPUT);
pinMode(seg_C, OUTPUT);
pinMode(seg_D, OUTPUT);
pinMode(seg_E, OUTPUT);
pinMode(seg_F, OUTPUT);
pinMode(seg_G, OUTPUT);
pinMode(displayPin1, OUTPUT);
pinMode(displayPin2, OUTPUT);
pinMode(displayPin3, OUTPUT);
pinMode(displayPin4, OUTPUT);
pinMode(SW1, INPUT);
pinMode(SW2, INPUT);
pinMode(SW3, INPUT);
pinMode(LED, OUTPUT);
MsTimer2::set(1, displayRefresh);
MsTimer2::start();
}
void loop()
{
if (freshBoot == true)
{
freshBoot = false;
writeToDisplay('8', displayPin1);
writeToDisplay('8', displayPin2);
writeToDisplay('8', displayPin3);
writeToDisplay('8', displayPin4);
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
loading();
setMyTime();
}
printTime();
delay(1000);
}