CENTER 3D
Dependencies: EFM32_CapSenseSlider EFM32_SegmentLCD mbed
main.cpp@0:ed973aca7da6, 2016-02-25 (annotated)
- Committer:
- hamid_155
- Date:
- Thu Feb 25 13:08:48 2016 +0000
- Revision:
- 0:ed973aca7da6
CENTER 3D
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hamid_155 | 0:ed973aca7da6 | 1 | #include "EFM32_SegmentLCD.h" |
hamid_155 | 0:ed973aca7da6 | 2 | #include "EFM32_CapSenseSlider.h" |
hamid_155 | 0:ed973aca7da6 | 3 | |
hamid_155 | 0:ed973aca7da6 | 4 | /******************** Define I/O *****************************/ |
hamid_155 | 0:ed973aca7da6 | 5 | InterruptIn in(PB9); |
hamid_155 | 0:ed973aca7da6 | 6 | |
hamid_155 | 0:ed973aca7da6 | 7 | silabs::EFM32_SegmentLCD segmentDisplay; |
hamid_155 | 0:ed973aca7da6 | 8 | silabs::EFM32_CapSenseSlider capSlider; |
hamid_155 | 0:ed973aca7da6 | 9 | |
hamid_155 | 0:ed973aca7da6 | 10 | /******************** Define Timers *****************************/ |
hamid_155 | 0:ed973aca7da6 | 11 | LowPowerTicker refreshTicker; |
hamid_155 | 0:ed973aca7da6 | 12 | |
hamid_155 | 0:ed973aca7da6 | 13 | /***************** Define global variables **********************/ |
hamid_155 | 0:ed973aca7da6 | 14 | #define INIT_SECONDS 17600 |
hamid_155 | 0:ed973aca7da6 | 15 | #define TEST_DURATION 10 |
hamid_155 | 0:ed973aca7da6 | 16 | |
hamid_155 | 0:ed973aca7da6 | 17 | volatile uint32_t count = 0, seconds = INIT_SECONDS; |
hamid_155 | 0:ed973aca7da6 | 18 | |
hamid_155 | 0:ed973aca7da6 | 19 | |
hamid_155 | 0:ed973aca7da6 | 20 | /***************** Define callback handlers *********************/ |
hamid_155 | 0:ed973aca7da6 | 21 | void tickerCallback(void); |
hamid_155 | 0:ed973aca7da6 | 22 | void in_handler(); |
hamid_155 | 0:ed973aca7da6 | 23 | void touchCallback(void); |
hamid_155 | 0:ed973aca7da6 | 24 | void slideCallback(void); |
hamid_155 | 0:ed973aca7da6 | 25 | |
hamid_155 | 0:ed973aca7da6 | 26 | /** |
hamid_155 | 0:ed973aca7da6 | 27 | * Callback for pushbutton interrupt |
hamid_155 | 0:ed973aca7da6 | 28 | */ |
hamid_155 | 0:ed973aca7da6 | 29 | void in_handler() { |
hamid_155 | 0:ed973aca7da6 | 30 | count++; |
hamid_155 | 0:ed973aca7da6 | 31 | segmentDisplay.ARing(count & 0x7, (count & 0x8) == 0); |
hamid_155 | 0:ed973aca7da6 | 32 | } |
hamid_155 | 0:ed973aca7da6 | 33 | |
hamid_155 | 0:ed973aca7da6 | 34 | /** |
hamid_155 | 0:ed973aca7da6 | 35 | * Callback for 1 second timebase |
hamid_155 | 0:ed973aca7da6 | 36 | */ |
hamid_155 | 0:ed973aca7da6 | 37 | void tickerCallback(void) { |
hamid_155 | 0:ed973aca7da6 | 38 | seconds++; |
hamid_155 | 0:ed973aca7da6 | 39 | uint32_t clockValue = ((seconds / 60) % 60) * 100 + (seconds % 60); |
hamid_155 | 0:ed973aca7da6 | 40 | segmentDisplay.Number(clockValue); |
hamid_155 | 0:ed973aca7da6 | 41 | segmentDisplay.Symbol(LCD_SYMBOL_COL10, seconds & 0x1); |
hamid_155 | 0:ed973aca7da6 | 42 | } |
hamid_155 | 0:ed973aca7da6 | 43 | |
hamid_155 | 0:ed973aca7da6 | 44 | /** |
hamid_155 | 0:ed973aca7da6 | 45 | * Callback for touching/untouching the cap slider |
hamid_155 | 0:ed973aca7da6 | 46 | */ |
hamid_155 | 0:ed973aca7da6 | 47 | void touchCallback(void) { |
hamid_155 | 0:ed973aca7da6 | 48 | segmentDisplay.Symbol(LCD_SYMBOL_EFM32, capSlider.isTouched()); |
hamid_155 | 0:ed973aca7da6 | 49 | |
hamid_155 | 0:ed973aca7da6 | 50 | if(!capSlider.isTouched()) { |
hamid_155 | 0:ed973aca7da6 | 51 | segmentDisplay.Write("Hello"); |
hamid_155 | 0:ed973aca7da6 | 52 | } |
hamid_155 | 0:ed973aca7da6 | 53 | } |
hamid_155 | 0:ed973aca7da6 | 54 | |
hamid_155 | 0:ed973aca7da6 | 55 | /** |
hamid_155 | 0:ed973aca7da6 | 56 | * Callback for sliding the cap slider |
hamid_155 | 0:ed973aca7da6 | 57 | */ |
hamid_155 | 0:ed973aca7da6 | 58 | void slideCallback(void) { |
hamid_155 | 0:ed973aca7da6 | 59 | segmentDisplay.LowerNumber(capSlider.get_position()); |
hamid_155 | 0:ed973aca7da6 | 60 | } |
hamid_155 | 0:ed973aca7da6 | 61 | |
hamid_155 | 0:ed973aca7da6 | 62 | /*************************** MAIN *******************************/ |
hamid_155 | 0:ed973aca7da6 | 63 | int main() { |
hamid_155 | 0:ed973aca7da6 | 64 | // Initialize pushbutton handler |
hamid_155 | 0:ed973aca7da6 | 65 | in.rise(NULL); |
hamid_155 | 0:ed973aca7da6 | 66 | in.fall(in_handler); |
hamid_155 | 0:ed973aca7da6 | 67 | |
hamid_155 | 0:ed973aca7da6 | 68 | // Enable the capacitive slider |
hamid_155 | 0:ed973aca7da6 | 69 | capSlider.start(); |
hamid_155 | 0:ed973aca7da6 | 70 | capSlider.attach_touch(touchCallback); |
hamid_155 | 0:ed973aca7da6 | 71 | capSlider.attach_untouch(touchCallback); |
hamid_155 | 0:ed973aca7da6 | 72 | capSlider.attach_slide(-1, slideCallback); |
hamid_155 | 0:ed973aca7da6 | 73 | |
hamid_155 | 0:ed973aca7da6 | 74 | // Start generating the 1Hz timebase |
hamid_155 | 0:ed973aca7da6 | 75 | refreshTicker.attach(&tickerCallback, 1.0f); |
hamid_155 | 0:ed973aca7da6 | 76 | |
hamid_155 | 0:ed973aca7da6 | 77 | printf("Initialization done! \n"); |
hamid_155 | 0:ed973aca7da6 | 78 | wait(0.01f); //Need to delay slightly to give the serial transmission a chance to flush out its buffer |
hamid_155 | 0:ed973aca7da6 | 79 | segmentDisplay.Write("Hello"); |
hamid_155 | 0:ed973aca7da6 | 80 | |
hamid_155 | 0:ed973aca7da6 | 81 | // Go into sleeping mode |
hamid_155 | 0:ed973aca7da6 | 82 | while(1) |
hamid_155 | 0:ed973aca7da6 | 83 | { |
hamid_155 | 0:ed973aca7da6 | 84 | sleep(); |
hamid_155 | 0:ed973aca7da6 | 85 | if(count >= 8) { |
hamid_155 | 0:ed973aca7da6 | 86 | // Go to 'completely dead' mode to show power consumption |
hamid_155 | 0:ed973aca7da6 | 87 | refreshTicker.detach(); |
hamid_155 | 0:ed973aca7da6 | 88 | capSlider.stop(); |
hamid_155 | 0:ed973aca7da6 | 89 | in.disable_irq(); |
hamid_155 | 0:ed973aca7da6 | 90 | delete &segmentDisplay; |
hamid_155 | 0:ed973aca7da6 | 91 | } |
hamid_155 | 0:ed973aca7da6 | 92 | } |
hamid_155 | 0:ed973aca7da6 | 93 | } |
hamid_155 | 0:ed973aca7da6 | 94 |