Clock with Real-Time Clock (RTC-8564) and I2C LCD module(SB1062B).

Dependencies:   DebouncedEdgeIn I2cLCD_cursor Rtc8564 mbed beep

/media/uploads/togayan/imgp0004s.jpg /media/uploads/togayan/lcdclock_circuit_rev4.png

Committer:
togayan
Date:
Mon Feb 17 08:13:21 2014 +0000
Revision:
2:6f0158399eff
Parent:
1:f8713c387a68
Child:
5:e374481e7554
test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
togayan 0:86ab67787717 1 #include "ClockViewModel.h"
togayan 0:86ab67787717 2
togayan 0:86ab67787717 3 using ViewModel::ClockViewModel;
togayan 0:86ab67787717 4
togayan 0:86ab67787717 5 // Icon Name ----
togayan 0:86ab67787717 6 // Mark
togayan 0:86ab67787717 7 // Battery_1
togayan 0:86ab67787717 8 // Battery_2
togayan 0:86ab67787717 9 // Battery_3
togayan 0:86ab67787717 10 // Battery_4
togayan 0:86ab67787717 11 // NoSound
togayan 0:86ab67787717 12 // Lock
togayan 0:86ab67787717 13 // ArrowDown
togayan 0:86ab67787717 14 // ArrowUp
togayan 0:86ab67787717 15 // Input
togayan 0:86ab67787717 16 // Alarm
togayan 0:86ab67787717 17 // Tell
togayan 0:86ab67787717 18 // Antenna
togayan 0:86ab67787717 19 // --------------
togayan 0:86ab67787717 20
togayan 2:6f0158399eff 21 const char* ClockViewModel::WEEKDAYS[] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", "ERR"};
togayan 2:6f0158399eff 22
togayan 2:6f0158399eff 23 ClockViewModel::ClockViewModel(I2cLCD& i2clcd, PinName set, PinName increment, PinName decrement)
togayan 0:86ab67787717 24 :m_i2clcd(i2clcd),
togayan 1:f8713c387a68 25 m_set(set),
togayan 2:6f0158399eff 26 m_increment(increment),
togayan 2:6f0158399eff 27 m_decrement(decrement),
togayan 1:f8713c387a68 28 m_clock(0),
togayan 1:f8713c387a68 29 m_dateTime(0),
togayan 2:6f0158399eff 30 m_mode(Model::CLOCK)
togayan 0:86ab67787717 31 {
togayan 1:f8713c387a68 32 m_set.mode(PullUp);
togayan 2:6f0158399eff 33 m_increment.mode(PullUp);
togayan 2:6f0158399eff 34 m_decrement.mode(PullUp);
togayan 2:6f0158399eff 35 m_set.fall(this, &ClockViewModel::setButtonOn);
togayan 2:6f0158399eff 36 m_increment.fall(this, &ClockViewModel::incrementButtonOn);
togayan 2:6f0158399eff 37 m_decrement.fall(this, &ClockViewModel::decrementButtonOn);
togayan 1:f8713c387a68 38 }
togayan 1:f8713c387a68 39
togayan 1:f8713c387a68 40 void ClockViewModel::setClock(Model::Clock* clock)
togayan 1:f8713c387a68 41 {
togayan 1:f8713c387a68 42 m_clock = clock;
togayan 1:f8713c387a68 43 m_dateTime = m_clock->getDateTime();
togayan 0:86ab67787717 44 }
togayan 0:86ab67787717 45
togayan 0:86ab67787717 46 void ClockViewModel::initialize()
togayan 0:86ab67787717 47 {
togayan 0:86ab67787717 48 // print ICON
togayan 0:86ab67787717 49 m_i2clcd.seticon( I2cLCD::Mark );
togayan 0:86ab67787717 50 m_i2clcd.seticon( I2cLCD::Battery_1 );
togayan 0:86ab67787717 51 m_i2clcd.seticon( I2cLCD::Battery_2 );
togayan 0:86ab67787717 52 m_i2clcd.seticon( I2cLCD::Battery_3 );
togayan 0:86ab67787717 53 m_i2clcd.seticon( I2cLCD::Battery_4 );
togayan 0:86ab67787717 54 m_i2clcd.seticon( I2cLCD::NoSound );
togayan 0:86ab67787717 55 m_i2clcd.seticon( I2cLCD::Lock );
togayan 0:86ab67787717 56 m_i2clcd.seticon( I2cLCD::ArrowDown );
togayan 0:86ab67787717 57 m_i2clcd.seticon( I2cLCD::ArrowUp );
togayan 0:86ab67787717 58 m_i2clcd.seticon( I2cLCD::Input );
togayan 0:86ab67787717 59 m_i2clcd.seticon( I2cLCD::Alarm );
togayan 0:86ab67787717 60 m_i2clcd.seticon( I2cLCD::Tell );
togayan 0:86ab67787717 61 m_i2clcd.seticon( I2cLCD::Antenna );
togayan 0:86ab67787717 62 }
togayan 0:86ab67787717 63
togayan 1:f8713c387a68 64 void ClockViewModel::dateTimeUpdated()
togayan 0:86ab67787717 65 {
togayan 2:6f0158399eff 66 static char dat[31] = " 20--/--/-- ***\n -- : -- : --";
togayan 1:f8713c387a68 67 uint8_t val = 0;
togayan 1:f8713c387a68 68
togayan 2:6f0158399eff 69 val = m_dateTime->tm_year % 100;
togayan 2:6f0158399eff 70 dat[3] = '0' + val / 10;
togayan 2:6f0158399eff 71 dat[4] = '0' + val % 10;
togayan 2:6f0158399eff 72 val = m_dateTime->tm_mon + 1;
togayan 2:6f0158399eff 73 dat[6] = '0' + val / 10;
togayan 2:6f0158399eff 74 dat[7] = '0' + val % 10;
togayan 2:6f0158399eff 75 val = m_dateTime->tm_mday;
togayan 2:6f0158399eff 76 dat[9] = '0' + val / 10;
togayan 2:6f0158399eff 77 dat[10] = '0' + val % 10;
togayan 2:6f0158399eff 78 val = m_dateTime->tm_wday;
togayan 2:6f0158399eff 79 dat[12] = WEEKDAYS[val][0];
togayan 2:6f0158399eff 80 dat[13] = WEEKDAYS[val][1];
togayan 2:6f0158399eff 81 dat[14] = WEEKDAYS[val][2];
togayan 2:6f0158399eff 82 val = m_dateTime->tm_hour;
togayan 1:f8713c387a68 83 dat[18] = '0' + val / 10;
togayan 1:f8713c387a68 84 dat[19] = '0' + val % 10;
togayan 2:6f0158399eff 85 val = m_dateTime->tm_min;
togayan 1:f8713c387a68 86 dat[23] = '0' + val / 10;
togayan 1:f8713c387a68 87 dat[24] = '0' + val % 10;
togayan 2:6f0158399eff 88 val = m_dateTime->tm_sec;
togayan 1:f8713c387a68 89 dat[28] = '0' + val / 10;
togayan 1:f8713c387a68 90 dat[29] = '0' + val % 10;
togayan 1:f8713c387a68 91
togayan 0:86ab67787717 92 m_i2clcd.locate(0, 0);
togayan 1:f8713c387a68 93 m_i2clcd.puts(dat);
togayan 2:6f0158399eff 94 setCurSor();
togayan 2:6f0158399eff 95 }
togayan 2:6f0158399eff 96
togayan 2:6f0158399eff 97 void ClockViewModel::mode(Model::OperationMode mode)
togayan 2:6f0158399eff 98 {
togayan 2:6f0158399eff 99 m_mode = mode;
togayan 2:6f0158399eff 100 setCurSor();
togayan 0:86ab67787717 101 }
togayan 0:86ab67787717 102
togayan 2:6f0158399eff 103 void ClockViewModel::setButtonOn()
togayan 2:6f0158399eff 104 {
togayan 2:6f0158399eff 105 m_clock->requestModeChange();
togayan 2:6f0158399eff 106 }
togayan 2:6f0158399eff 107
togayan 2:6f0158399eff 108 void ClockViewModel::incrementButtonOn()
togayan 0:86ab67787717 109 {
togayan 2:6f0158399eff 110 m_clock->requestIncrementValue();
togayan 2:6f0158399eff 111 }
togayan 2:6f0158399eff 112
togayan 2:6f0158399eff 113 void ClockViewModel::decrementButtonOn()
togayan 2:6f0158399eff 114 {
togayan 2:6f0158399eff 115 m_clock->requestDecrementValue();
togayan 1:f8713c387a68 116 }
togayan 1:f8713c387a68 117
togayan 2:6f0158399eff 118 void ClockViewModel::setCurSor()
togayan 1:f8713c387a68 119 {
togayan 2:6f0158399eff 120 switch(m_mode)
togayan 2:6f0158399eff 121 {
togayan 2:6f0158399eff 122 case Model::CLOCK:
togayan 2:6f0158399eff 123 m_i2clcd.cursor(false, 0, 0);
togayan 2:6f0158399eff 124 break;
togayan 2:6f0158399eff 125 case Model::SET_YEAR:
togayan 2:6f0158399eff 126 m_i2clcd.cursor(true, 4, 0);
togayan 2:6f0158399eff 127 break;
togayan 2:6f0158399eff 128 case Model::SET_MONTH:
togayan 2:6f0158399eff 129 m_i2clcd.cursor(true, 7, 0);
togayan 2:6f0158399eff 130 break;
togayan 2:6f0158399eff 131 case Model::SET_DAY:
togayan 2:6f0158399eff 132 m_i2clcd.cursor(true, 10, 0);
togayan 2:6f0158399eff 133 break;
togayan 2:6f0158399eff 134 case Model::SET_HOUR:
togayan 2:6f0158399eff 135 m_i2clcd.cursor(true, 3, 1);
togayan 2:6f0158399eff 136 break;
togayan 2:6f0158399eff 137 case Model::SET_MINUTE:
togayan 2:6f0158399eff 138 m_i2clcd.cursor(true, 8, 1);
togayan 2:6f0158399eff 139 break;
togayan 2:6f0158399eff 140 case Model::SET_SECOND:
togayan 2:6f0158399eff 141 m_i2clcd.cursor(true, 13, 1);
togayan 2:6f0158399eff 142 break;
togayan 2:6f0158399eff 143 default:
togayan 2:6f0158399eff 144 break;
togayan 2:6f0158399eff 145 }
togayan 1:f8713c387a68 146 }