![](/media/cache/profiles/142c65e00f4f7cf2e6c4c996e34005df.50x50_q85.jpg)
Clock with Real-Time Clock (RTC-8564) and I2C LCD module(SB1062B).
Dependencies: DebouncedEdgeIn I2cLCD_cursor Rtc8564 mbed beep
ViewModel/ClockViewModel.cpp
- Committer:
- togayan
- Date:
- 2014-02-14
- Revision:
- 1:f8713c387a68
- Parent:
- 0:86ab67787717
- Child:
- 2:6f0158399eff
File content as of revision 1:f8713c387a68:
#include "ClockViewModel.h" #include "EventMechanism/EventParam0.h" using ViewModel::ClockViewModel; // Icon Name ---- // Mark // Battery_1 // Battery_2 // Battery_3 // Battery_4 // NoSound // Lock // ArrowDown // ArrowUp // Input // Alarm // Tell // Antenna // -------------- ClockViewModel::ClockViewModel(I2cLCD& i2clcd, PinName set, PinName select, EventMechanism::I_EventHandler* evHandler, DigitalOut& led) :m_i2clcd(i2clcd), m_set(set), m_select(select), m_evHandler(evHandler), m_clock(0), m_dateTime(0), m_led(led) { m_set.mode(PullUp); m_set.fall(this, &ClockViewModel::setButtonPressed); } void ClockViewModel::setClock(Model::Clock* clock) { m_clock = clock; m_dateTime = m_clock->getDateTime(); } void ClockViewModel::initialize() { //m_set.rise(this, &ClockViewModel::setButtonPressed); m_select.fall(this, &ClockViewModel::selectButtonPressed); // print ICON m_i2clcd.seticon( I2cLCD::Mark ); m_i2clcd.seticon( I2cLCD::Battery_1 ); m_i2clcd.seticon( I2cLCD::Battery_2 ); m_i2clcd.seticon( I2cLCD::Battery_3 ); m_i2clcd.seticon( I2cLCD::Battery_4 ); m_i2clcd.seticon( I2cLCD::NoSound ); m_i2clcd.seticon( I2cLCD::Lock ); m_i2clcd.seticon( I2cLCD::ArrowDown ); m_i2clcd.seticon( I2cLCD::ArrowUp ); m_i2clcd.seticon( I2cLCD::Input ); m_i2clcd.seticon( I2cLCD::Alarm ); m_i2clcd.seticon( I2cLCD::Tell ); m_i2clcd.seticon( I2cLCD::Antenna ); } void ClockViewModel::dateTimeUpdated() { static char dat[31] = " 20-- / -- / --\n -- : -- : --"; uint8_t val = 0; val = m_dateTime->year % 100; dat[3] = '0' + val / 10; dat[4] = '0' + val % 10; val = m_dateTime->month; dat[8] = '0' + val / 10; dat[9] = '0' + val % 10; val = m_dateTime->day; dat[13] = '0' + val / 10; dat[14] = '0' + val % 10; val = m_dateTime->hour; dat[18] = '0' + val / 10; dat[19] = '0' + val % 10; val = m_dateTime->minute; dat[23] = '0' + val / 10; dat[24] = '0' + val % 10; val = m_dateTime->second; dat[28] = '0' + val / 10; dat[29] = '0' + val % 10; m_i2clcd.locate(0, 0); m_i2clcd.puts(dat); } void ClockViewModel::setButtonPressed() { m_evHandler->postEvent(new EventMechanism::EventParam0<ClockViewModel>(this, &ClockViewModel::setButtonPressedAsync)); } void ClockViewModel::setButtonPressedAsync() { puts("setButtonPressedAsync\n"); m_led = (m_led == 1)? 0 : 1; m_clock->initialize(); } void ClockViewModel::selectButtonPressed() { m_evHandler->postEvent(new EventMechanism::EventParam0<ClockViewModel>(this, &ClockViewModel::selectButtonPressedAsync)); } void ClockViewModel::selectButtonPressedAsync() { puts("selectButtonPressedAsync\n"); m_led = (m_led == 1)? 0 : 1; m_clock->initialize(); }