Using the cap slider and segment LCD on LG/WG/GG.
Dependencies: EFM32_CapSenseSlider EFM32_SegmentLCD mbed
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
Generated on Sat Jul 16 2022 18:41:43 by 1.7.2