#include "mbed.h”
#include "Servo.h"
//initailizing Digital In pins (3) for setting the time. If pin 30 is high at startup (reset) then check hour and minute pin (29,28) and update time.
DigitalIn SetPin(p30);
DigitalIn SetHour(p29);
DigitalIn SetMinute(p28);
//For chime servo
Servo chimeServo(p21);
int index = 0;
int switchdirection = 0;
//initializing integer "stack" for seconds minutes etc.
BusOut ArrayStack(p10,p11,p12,p13,p14,p15,p16, NC, NC, NC, NC, NC, NC, NC, NC, NC);
//initializing multiplex scheme pins
DigitalOut HourRow(p5);
DigitalOut MinuteRow(p6);
DigitalOut SecondRow(p7);
DigitalOut DayRow(p8);
DigitalOut MonthRow(p9);
const float lag = .004; //.004 is natural lag
//time function variables
Ticker timer;
//On-board debug LEDs
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
//Human time variables
int seconds = 50;
int minutes = 58;
int hours = 7;
int days = 2;
int months = 11;
//Human time function
void attime() {
if (seconds >= 59) {
seconds = 0;
minutes = minutes + 1;
}
seconds = seconds + 1;
if (minutes >= 59) {
minutes = 0;
hours = hours +1;
if(switchdirection == 1){
for(index = 0 ; index < 50 ; index++){
chimeServo = index/100.0;
wait (0.01);
}
switchdirection = 0;
}
else if(switchdirection == 0){
for(index = 100 ; index > 50 ; index--){
chimeServo = index/100.0;
wait(0.01);
}
switchdirection = 1;
}
}
if (hours >= 23) {
hours = 0;
days = days + 1;
}
if (days >=31) {
days = 1;
months = months + 1;
}
if (months >= 13) {
months = 1;
}
if(SetPin != 0) {
led1 = 1;
while(SetPin != 0) {
if(SetHour != 0) {
hours = hours + 1;
led2 = 1;
wait(.25);
led2 = 0;
}
if(SetMinute != 0) {
minutes = minutes + 1;
led3 = 1;
wait(.25);
led3 = 0;
}
}
led1 = 0;
}
if(SetMinute != 0) {
while(SetMinute != 0) {
months = months + 1;
led4 = 1;
wait(.3);
led4 = 0;
}
}
if(SetHour != 0) {
while(SetHour != 0) {
days = days + 1;
led4 = 1;
wait(.3);
led4 = 0;
}
}
}
int main() {
timer.attach(&attime, 1);
while (1) {
// led1 = !led1;
HourRow = 1;
ArrayStack = hours;
wait(lag);
HourRow = 0;
MinuteRow = 1;
ArrayStack = minutes;
wait(lag);
MinuteRow = 0;
SecondRow = 1;
ArrayStack = seconds;
wait(lag);
SecondRow = 0;
DayRow = 1;
ArrayStack = days;
wait(lag);
DayRow = 0;
MonthRow = 1;
ArrayStack = months;
wait(lag);
MonthRow = 0;
}
}