CENTER 3D
Dependencies: EFM32_CapSenseSlider EFM32_SegmentLCD mbed
main.cpp
- Committer:
- hamid_155
- Date:
- 2016-02-25
- Revision:
- 0:ed973aca7da6
File content as of revision 0:ed973aca7da6:
#include "EFM32_SegmentLCD.h" #include "EFM32_CapSenseSlider.h" /******************** Define I/O *****************************/ InterruptIn in(PB9); silabs::EFM32_SegmentLCD segmentDisplay; silabs::EFM32_CapSenseSlider capSlider; /******************** Define Timers *****************************/ LowPowerTicker refreshTicker; /***************** Define global variables **********************/ #define INIT_SECONDS 17600 #define TEST_DURATION 10 volatile uint32_t count = 0, seconds = INIT_SECONDS; /***************** Define callback handlers *********************/ void tickerCallback(void); void in_handler(); void touchCallback(void); void slideCallback(void); /** * Callback for pushbutton interrupt */ void in_handler() { count++; segmentDisplay.ARing(count & 0x7, (count & 0x8) == 0); } /** * Callback for 1 second timebase */ void tickerCallback(void) { seconds++; uint32_t clockValue = ((seconds / 60) % 60) * 100 + (seconds % 60); segmentDisplay.Number(clockValue); segmentDisplay.Symbol(LCD_SYMBOL_COL10, seconds & 0x1); } /** * Callback for touching/untouching the cap slider */ void touchCallback(void) { segmentDisplay.Symbol(LCD_SYMBOL_EFM32, capSlider.isTouched()); if(!capSlider.isTouched()) { segmentDisplay.Write("Hello"); } } /** * Callback for sliding the cap slider */ void slideCallback(void) { segmentDisplay.LowerNumber(capSlider.get_position()); } /*************************** MAIN *******************************/ int main() { // Initialize pushbutton handler in.rise(NULL); in.fall(in_handler); // Enable the capacitive slider capSlider.start(); capSlider.attach_touch(touchCallback); capSlider.attach_untouch(touchCallback); capSlider.attach_slide(-1, slideCallback); // Start generating the 1Hz timebase refreshTicker.attach(&tickerCallback, 1.0f); printf("Initialization done! \n"); wait(0.01f); //Need to delay slightly to give the serial transmission a chance to flush out its buffer segmentDisplay.Write("Hello"); // Go into sleeping mode while(1) { sleep(); if(count >= 8) { // Go to 'completely dead' mode to show power consumption refreshTicker.detach(); capSlider.stop(); in.disable_irq(); delete &segmentDisplay; } } }