Using the cap slider and segment LCD on LG/WG/GG.

Dependencies:   EFM32_CapSenseSlider EFM32_SegmentLCD mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "EFM32_SegmentLCD.h"
00002 #include "EFM32_CapSenseSlider.h"
00003 
00004 /******************** Define I/O *****************************/
00005 InterruptIn in(PB9);
00006 
00007 silabs::EFM32_SegmentLCD segmentDisplay;
00008 silabs::EFM32_CapSenseSlider capSlider;
00009 
00010 /******************** Define Timers *****************************/
00011 LowPowerTicker refreshTicker;
00012 
00013 /***************** Define global variables **********************/
00014 #define INIT_SECONDS        17600
00015 #define TEST_DURATION       10
00016 
00017 volatile uint32_t count = 0, seconds = INIT_SECONDS;
00018 
00019 
00020 /***************** Define callback handlers *********************/
00021 void tickerCallback(void);
00022 void in_handler();
00023 void touchCallback(void);
00024 void slideCallback(void);
00025 
00026 /**
00027  * Callback for pushbutton interrupt
00028  */
00029 void in_handler() {
00030     count++;
00031     segmentDisplay.ARing(count & 0x7, (count & 0x8) == 0);
00032 }
00033 
00034 /**
00035  * Callback for 1 second timebase
00036  */
00037 void tickerCallback(void) {
00038     seconds++;
00039     uint32_t clockValue = ((seconds / 60) % 60) * 100 + (seconds % 60);
00040     segmentDisplay.Number(clockValue);
00041     segmentDisplay.Symbol(LCD_SYMBOL_COL10, seconds & 0x1);
00042 }
00043 
00044 /**
00045  * Callback for touching/untouching the cap slider
00046  */
00047 void touchCallback(void) {
00048     segmentDisplay.Symbol(LCD_SYMBOL_EFM32, capSlider.isTouched());
00049 
00050     if(!capSlider.isTouched()) {
00051         segmentDisplay.Write("Hello");
00052     }
00053 }
00054 
00055 /**
00056  * Callback for sliding the cap slider
00057  */
00058 void slideCallback(void) {
00059     segmentDisplay.LowerNumber(capSlider.get_position());
00060 }
00061 
00062 /*************************** MAIN *******************************/
00063 int main() {
00064     // Initialize pushbutton handler
00065     in.rise(NULL);
00066     in.fall(in_handler);
00067 
00068     // Enable the capacitive slider
00069     capSlider.start();
00070     capSlider.attach_touch(touchCallback);
00071     capSlider.attach_untouch(touchCallback);
00072     capSlider.attach_slide(-1, slideCallback);
00073 
00074     // Start generating the 1Hz timebase
00075     refreshTicker.attach(&tickerCallback, 1.0f);
00076 
00077     printf("Initialization done! \n");
00078     wait(0.01f); //Need to delay slightly to give the serial transmission a chance to flush out its buffer
00079     segmentDisplay.Write("Hello");
00080 
00081     // Go into sleeping mode
00082     while(1)
00083     {
00084         sleep();
00085         if(count >= 8) {
00086             // Go to 'completely dead' mode to show power consumption
00087             refreshTicker.detach();
00088             capSlider.stop();
00089             in.disable_irq();
00090             delete &segmentDisplay;
00091         }
00092     }
00093 }
00094