CENTER 3D

Dependencies:   EFM32_CapSenseSlider EFM32_SegmentLCD mbed

Committer:
hamid_155
Date:
Thu Feb 25 13:08:48 2016 +0000
Revision:
0:ed973aca7da6
CENTER 3D

Who changed what in which revision?

UserRevisionLine numberNew 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