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

Dependencies:   EFM32_CapSenseSlider EFM32_SegmentLCD mbed

Demo program showing the capacitive slider and segment LCD functionality of the Leopard, Wonder and Giant Gecko Starter Kits.

Information

All examples in this repo are considered EXPERIMENTAL QUALITY, meaning this code has been created as one-off proof-of-concept and is suitable as a demonstration for experimental purposes only. This code will not be regularly maintained by Silicon Labs and there is no guarantee that these projects will work across all environments, SDK versions and hardware.

Committer:
stevew817
Date:
Fri Apr 17 20:16:49 2015 +0000
Revision:
0:9d3739ba3237
Child:
4:4bd20d989554
initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stevew817 0:9d3739ba3237 1 #include "test_env.h"
stevew817 0:9d3739ba3237 2
stevew817 0:9d3739ba3237 3 #include "EFM32_SegmentLCD.h"
stevew817 0:9d3739ba3237 4 #include "EFM32_CapSenseSlider.h"
stevew817 0:9d3739ba3237 5
stevew817 0:9d3739ba3237 6 /******************** Define I/O *****************************/
stevew817 0:9d3739ba3237 7 InterruptIn in(PB9);
stevew817 0:9d3739ba3237 8
stevew817 0:9d3739ba3237 9 silabs::EFM32_SegmentLCD segmentDisplay;
stevew817 0:9d3739ba3237 10 silabs::EFM32_CapSenseSlider capSlider;
stevew817 0:9d3739ba3237 11
stevew817 0:9d3739ba3237 12 /******************** Define Timers *****************************/
stevew817 0:9d3739ba3237 13 LowPowerTicker refreshTicker;
stevew817 0:9d3739ba3237 14
stevew817 0:9d3739ba3237 15 /***************** Define global variables **********************/
stevew817 0:9d3739ba3237 16 #define INIT_SECONDS 17600
stevew817 0:9d3739ba3237 17 #define TEST_DURATION 10
stevew817 0:9d3739ba3237 18
stevew817 0:9d3739ba3237 19 volatile uint32_t count = 0, seconds = INIT_SECONDS;
stevew817 0:9d3739ba3237 20
stevew817 0:9d3739ba3237 21
stevew817 0:9d3739ba3237 22 /***************** Define callback handlers *********************/
stevew817 0:9d3739ba3237 23 void tickerCallback(void);
stevew817 0:9d3739ba3237 24 void in_handler();
stevew817 0:9d3739ba3237 25 void touchCallback(void);
stevew817 0:9d3739ba3237 26 void slideCallback(void);
stevew817 0:9d3739ba3237 27
stevew817 0:9d3739ba3237 28 /**
stevew817 0:9d3739ba3237 29 * Callback for pushbutton interrupt
stevew817 0:9d3739ba3237 30 */
stevew817 0:9d3739ba3237 31 void in_handler() {
stevew817 0:9d3739ba3237 32 count++;
stevew817 0:9d3739ba3237 33 segmentDisplay.ARing(count & 0x7, (count & 0x8) == 0);
stevew817 0:9d3739ba3237 34 }
stevew817 0:9d3739ba3237 35
stevew817 0:9d3739ba3237 36 /**
stevew817 0:9d3739ba3237 37 * Callback for 1 second timebase
stevew817 0:9d3739ba3237 38 */
stevew817 0:9d3739ba3237 39 void tickerCallback(void) {
stevew817 0:9d3739ba3237 40 seconds++;
stevew817 0:9d3739ba3237 41 uint32_t clockValue = ((seconds / 60) % 60) * 100 + (seconds % 60);
stevew817 0:9d3739ba3237 42 segmentDisplay.Number(clockValue);
stevew817 0:9d3739ba3237 43 segmentDisplay.Symbol(LCD_SYMBOL_COL10, seconds & 0x1);
stevew817 0:9d3739ba3237 44 }
stevew817 0:9d3739ba3237 45
stevew817 0:9d3739ba3237 46 /**
stevew817 0:9d3739ba3237 47 * Callback for touching/untouching the cap slider
stevew817 0:9d3739ba3237 48 */
stevew817 0:9d3739ba3237 49 void touchCallback(void) {
stevew817 0:9d3739ba3237 50 segmentDisplay.Symbol(LCD_SYMBOL_EFM32, capSlider.isTouched());
stevew817 0:9d3739ba3237 51
stevew817 0:9d3739ba3237 52 if(!capSlider.isTouched()) {
stevew817 0:9d3739ba3237 53 segmentDisplay.Write("Hello");
stevew817 0:9d3739ba3237 54 }
stevew817 0:9d3739ba3237 55 }
stevew817 0:9d3739ba3237 56
stevew817 0:9d3739ba3237 57 /**
stevew817 0:9d3739ba3237 58 * Callback for sliding the cap slider
stevew817 0:9d3739ba3237 59 */
stevew817 0:9d3739ba3237 60 void slideCallback(void) {
stevew817 0:9d3739ba3237 61 segmentDisplay.LowerNumber(capSlider.get_position());
stevew817 0:9d3739ba3237 62 }
stevew817 0:9d3739ba3237 63
stevew817 0:9d3739ba3237 64 /*************************** MAIN *******************************/
stevew817 0:9d3739ba3237 65 int main() {
stevew817 0:9d3739ba3237 66 // Initialize pushbutton handler
stevew817 0:9d3739ba3237 67 in.rise(NULL);
stevew817 0:9d3739ba3237 68 in.fall(in_handler);
stevew817 0:9d3739ba3237 69
stevew817 0:9d3739ba3237 70 // Enable the capacitive slider
stevew817 0:9d3739ba3237 71 capSlider.start();
stevew817 0:9d3739ba3237 72 capSlider.attach_touch(touchCallback);
stevew817 0:9d3739ba3237 73 capSlider.attach_untouch(touchCallback);
stevew817 0:9d3739ba3237 74 capSlider.attach_slide(-1, slideCallback);
stevew817 0:9d3739ba3237 75
stevew817 0:9d3739ba3237 76 // Start generating the 1Hz timebase
stevew817 0:9d3739ba3237 77 refreshTicker.attach(&tickerCallback, 1.0f);
stevew817 0:9d3739ba3237 78
stevew817 0:9d3739ba3237 79 printf("Initialization done! \n");
stevew817 0:9d3739ba3237 80
stevew817 0:9d3739ba3237 81 segmentDisplay.Write("Hello");
stevew817 0:9d3739ba3237 82
stevew817 0:9d3739ba3237 83 // Go into sleeping mode
stevew817 0:9d3739ba3237 84 while(1)
stevew817 0:9d3739ba3237 85 {
stevew817 0:9d3739ba3237 86 sleep();
stevew817 0:9d3739ba3237 87 if(count >= 8) {
stevew817 0:9d3739ba3237 88 refreshTicker.detach();
stevew817 0:9d3739ba3237 89 capSlider.stop();
stevew817 0:9d3739ba3237 90 in.disable_irq();
stevew817 0:9d3739ba3237 91 delete &segmentDisplay;
stevew817 0:9d3739ba3237 92 }
stevew817 0:9d3739ba3237 93 }
stevew817 0:9d3739ba3237 94 }
stevew817 0:9d3739ba3237 95