
Random terror phrases
Dependencies: EFM32_CapSenseSlider EFM32_SegmentLCD mbed
Fork of EMF32-Segment-Touch-Demo by
main.cpp@1:611525c0aa76, 2015-06-26 (annotated)
- Committer:
- MaxScorda
- Date:
- Fri Jun 26 11:36:58 2015 +0000
- Revision:
- 1:611525c0aa76
- Parent:
- 0:cb2d0eb1f49e
- Child:
- 2:9c22b1264236
Add LEDs
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MaxScorda | 0:cb2d0eb1f49e | 1 | #include "EFM32_SegmentLCD.h" |
MaxScorda | 0:cb2d0eb1f49e | 2 | #include "EFM32_CapSenseSlider.h" |
MaxScorda | 0:cb2d0eb1f49e | 3 | |
MaxScorda | 0:cb2d0eb1f49e | 4 | /******************** Define I/O *****************************/ |
MaxScorda | 0:cb2d0eb1f49e | 5 | InterruptIn in0(PB9); |
MaxScorda | 0:cb2d0eb1f49e | 6 | InterruptIn in1(PB10); |
MaxScorda | 0:cb2d0eb1f49e | 7 | |
MaxScorda | 0:cb2d0eb1f49e | 8 | silabs::EFM32_SegmentLCD segmentDisplay; |
MaxScorda | 0:cb2d0eb1f49e | 9 | silabs::EFM32_CapSenseSlider capSlider; |
MaxScorda | 0:cb2d0eb1f49e | 10 | |
MaxScorda | 1:611525c0aa76 | 11 | DigitalOut myled1(LED1); |
MaxScorda | 1:611525c0aa76 | 12 | DigitalOut myled0(LED0); |
MaxScorda | 1:611525c0aa76 | 13 | |
MaxScorda | 0:cb2d0eb1f49e | 14 | /******************** Define Timers *****************************/ |
MaxScorda | 1:611525c0aa76 | 15 | // devo separare i timers. Non so il perche' |
MaxScorda | 0:cb2d0eb1f49e | 16 | LowPowerTicker refreshTicker; |
MaxScorda | 1:611525c0aa76 | 17 | LowPowerTicker ledTicker0; |
MaxScorda | 1:611525c0aa76 | 18 | LowPowerTicker ledTicker1; |
MaxScorda | 0:cb2d0eb1f49e | 19 | |
MaxScorda | 0:cb2d0eb1f49e | 20 | /***************** Define global variables **********************/ |
MaxScorda | 0:cb2d0eb1f49e | 21 | #define INIT_SECONDS 17600 |
MaxScorda | 0:cb2d0eb1f49e | 22 | #define TEST_DURATION 10 |
MaxScorda | 0:cb2d0eb1f49e | 23 | |
MaxScorda | 0:cb2d0eb1f49e | 24 | volatile uint32_t seconds = INIT_SECONDS; |
MaxScorda | 0:cb2d0eb1f49e | 25 | int count = -1; |
MaxScorda | 0:cb2d0eb1f49e | 26 | |
MaxScorda | 0:cb2d0eb1f49e | 27 | |
MaxScorda | 0:cb2d0eb1f49e | 28 | /***************** Define callback handlers *********************/ |
MaxScorda | 0:cb2d0eb1f49e | 29 | void tickerCallback(void); |
MaxScorda | 0:cb2d0eb1f49e | 30 | void in0_handler(); |
MaxScorda | 0:cb2d0eb1f49e | 31 | void in1_handler(); |
MaxScorda | 0:cb2d0eb1f49e | 32 | void touchCallback(void); |
MaxScorda | 0:cb2d0eb1f49e | 33 | void slideCallback(void); |
MaxScorda | 0:cb2d0eb1f49e | 34 | |
MaxScorda | 0:cb2d0eb1f49e | 35 | /** |
MaxScorda | 0:cb2d0eb1f49e | 36 | * Callback for pushbutton interrupt |
MaxScorda | 0:cb2d0eb1f49e | 37 | */ |
MaxScorda | 0:cb2d0eb1f49e | 38 | |
MaxScorda | 0:cb2d0eb1f49e | 39 | void symbolGest() |
MaxScorda | 0:cb2d0eb1f49e | 40 | { |
MaxScorda | 0:cb2d0eb1f49e | 41 | if (count==7) { |
MaxScorda | 0:cb2d0eb1f49e | 42 | segmentDisplay.Symbol(LCD_SYMBOL_GECKO, true); |
MaxScorda | 0:cb2d0eb1f49e | 43 | segmentDisplay.Write("GeckoOn"); |
MaxScorda | 0:cb2d0eb1f49e | 44 | } else { |
MaxScorda | 0:cb2d0eb1f49e | 45 | segmentDisplay.Symbol(LCD_SYMBOL_GECKO, false); |
MaxScorda | 0:cb2d0eb1f49e | 46 | if (count%2==0) segmentDisplay.Write("Scorda"); |
MaxScorda | 0:cb2d0eb1f49e | 47 | else segmentDisplay.Write("TataGek"); |
MaxScorda | 0:cb2d0eb1f49e | 48 | } |
MaxScorda | 0:cb2d0eb1f49e | 49 | |
MaxScorda | 0:cb2d0eb1f49e | 50 | } |
MaxScorda | 0:cb2d0eb1f49e | 51 | |
MaxScorda | 0:cb2d0eb1f49e | 52 | void in0_handler() |
MaxScorda | 0:cb2d0eb1f49e | 53 | { |
MaxScorda | 0:cb2d0eb1f49e | 54 | count++; |
MaxScorda | 0:cb2d0eb1f49e | 55 | if (count>7) count=7; |
MaxScorda | 0:cb2d0eb1f49e | 56 | else segmentDisplay.ARing(count, true); |
MaxScorda | 0:cb2d0eb1f49e | 57 | symbolGest() ; |
MaxScorda | 0:cb2d0eb1f49e | 58 | |
MaxScorda | 0:cb2d0eb1f49e | 59 | } |
MaxScorda | 0:cb2d0eb1f49e | 60 | |
MaxScorda | 0:cb2d0eb1f49e | 61 | void in1_handler() |
MaxScorda | 0:cb2d0eb1f49e | 62 | { |
MaxScorda | 0:cb2d0eb1f49e | 63 | segmentDisplay.ARing(count, false); |
MaxScorda | 0:cb2d0eb1f49e | 64 | count--; |
MaxScorda | 0:cb2d0eb1f49e | 65 | if (count<0) count=-1; |
MaxScorda | 0:cb2d0eb1f49e | 66 | symbolGest() ; |
MaxScorda | 0:cb2d0eb1f49e | 67 | |
MaxScorda | 0:cb2d0eb1f49e | 68 | } |
MaxScorda | 0:cb2d0eb1f49e | 69 | |
MaxScorda | 0:cb2d0eb1f49e | 70 | |
MaxScorda | 0:cb2d0eb1f49e | 71 | /** |
MaxScorda | 0:cb2d0eb1f49e | 72 | * Callback for 1 second timebase |
MaxScorda | 0:cb2d0eb1f49e | 73 | */ |
MaxScorda | 0:cb2d0eb1f49e | 74 | void tickerCallback(void) |
MaxScorda | 0:cb2d0eb1f49e | 75 | { |
MaxScorda | 0:cb2d0eb1f49e | 76 | seconds++; |
MaxScorda | 0:cb2d0eb1f49e | 77 | uint32_t clockValue = ((seconds / 60) % 60) * 100 + (seconds % 60); |
MaxScorda | 0:cb2d0eb1f49e | 78 | segmentDisplay.Number(clockValue); |
MaxScorda | 0:cb2d0eb1f49e | 79 | segmentDisplay.Symbol(LCD_SYMBOL_COL10, seconds & 0x1); |
MaxScorda | 0:cb2d0eb1f49e | 80 | } |
MaxScorda | 0:cb2d0eb1f49e | 81 | |
MaxScorda | 0:cb2d0eb1f49e | 82 | /** |
MaxScorda | 0:cb2d0eb1f49e | 83 | * Callback for touching/untouching the cap slider |
MaxScorda | 0:cb2d0eb1f49e | 84 | */ |
MaxScorda | 0:cb2d0eb1f49e | 85 | void touchCallback(void) |
MaxScorda | 0:cb2d0eb1f49e | 86 | { |
MaxScorda | 0:cb2d0eb1f49e | 87 | segmentDisplay.Symbol(LCD_SYMBOL_EFM32, capSlider.isTouched()); |
MaxScorda | 0:cb2d0eb1f49e | 88 | |
MaxScorda | 0:cb2d0eb1f49e | 89 | if(!capSlider.isTouched()) { |
MaxScorda | 0:cb2d0eb1f49e | 90 | segmentDisplay.Write("Scorda"); |
MaxScorda | 0:cb2d0eb1f49e | 91 | } |
MaxScorda | 0:cb2d0eb1f49e | 92 | } |
MaxScorda | 0:cb2d0eb1f49e | 93 | |
MaxScorda | 0:cb2d0eb1f49e | 94 | /** |
MaxScorda | 0:cb2d0eb1f49e | 95 | * Callback for sliding the cap slider |
MaxScorda | 0:cb2d0eb1f49e | 96 | */ |
MaxScorda | 0:cb2d0eb1f49e | 97 | void slideCallback(void) |
MaxScorda | 0:cb2d0eb1f49e | 98 | { |
MaxScorda | 0:cb2d0eb1f49e | 99 | segmentDisplay.LowerNumber(capSlider.get_position()); |
MaxScorda | 0:cb2d0eb1f49e | 100 | } |
MaxScorda | 0:cb2d0eb1f49e | 101 | |
MaxScorda | 1:611525c0aa76 | 102 | void ledToggler(void) |
MaxScorda | 1:611525c0aa76 | 103 | { |
MaxScorda | 1:611525c0aa76 | 104 | myled1 = !myled1; |
MaxScorda | 1:611525c0aa76 | 105 | } |
MaxScorda | 1:611525c0aa76 | 106 | |
MaxScorda | 1:611525c0aa76 | 107 | void ledTogglerGen(void) |
MaxScorda | 1:611525c0aa76 | 108 | { |
MaxScorda | 1:611525c0aa76 | 109 | myled0 = !myled0; |
MaxScorda | 1:611525c0aa76 | 110 | } |
MaxScorda | 1:611525c0aa76 | 111 | |
MaxScorda | 0:cb2d0eb1f49e | 112 | /*************************** MAIN *******************************/ |
MaxScorda | 0:cb2d0eb1f49e | 113 | int main() |
MaxScorda | 0:cb2d0eb1f49e | 114 | { |
MaxScorda | 0:cb2d0eb1f49e | 115 | // Initialize pushbutton handler |
MaxScorda | 0:cb2d0eb1f49e | 116 | in0.rise(NULL); |
MaxScorda | 0:cb2d0eb1f49e | 117 | in0.fall(in0_handler); |
MaxScorda | 0:cb2d0eb1f49e | 118 | |
MaxScorda | 0:cb2d0eb1f49e | 119 | in1.rise(NULL); |
MaxScorda | 0:cb2d0eb1f49e | 120 | in1.fall(in1_handler); |
MaxScorda | 0:cb2d0eb1f49e | 121 | |
MaxScorda | 0:cb2d0eb1f49e | 122 | // Enable the capacitive slider |
MaxScorda | 0:cb2d0eb1f49e | 123 | capSlider.start(); |
MaxScorda | 0:cb2d0eb1f49e | 124 | capSlider.attach_touch(touchCallback); |
MaxScorda | 0:cb2d0eb1f49e | 125 | capSlider.attach_untouch(touchCallback); |
MaxScorda | 0:cb2d0eb1f49e | 126 | capSlider.attach_slide(-1, slideCallback); |
MaxScorda | 0:cb2d0eb1f49e | 127 | |
MaxScorda | 0:cb2d0eb1f49e | 128 | // Start generating the 1Hz timebase |
MaxScorda | 0:cb2d0eb1f49e | 129 | refreshTicker.attach(&tickerCallback, 1.0f); |
MaxScorda | 1:611525c0aa76 | 130 | ledTicker1.attach(&ledToggler, 0.4f); |
MaxScorda | 1:611525c0aa76 | 131 | ledTicker0.attach(&ledTogglerGen, 0.5f); |
MaxScorda | 0:cb2d0eb1f49e | 132 | |
MaxScorda | 0:cb2d0eb1f49e | 133 | printf("Initialization done! \n"); |
MaxScorda | 0:cb2d0eb1f49e | 134 | wait(0.01f); //Need to delay slightly to give the serial transmission a chance to flush out its buffer |
MaxScorda | 0:cb2d0eb1f49e | 135 | segmentDisplay.Write("Scorda"); |
MaxScorda | 0:cb2d0eb1f49e | 136 | |
MaxScorda | 0:cb2d0eb1f49e | 137 | |
MaxScorda | 0:cb2d0eb1f49e | 138 | // Go into sleeping mode |
MaxScorda | 0:cb2d0eb1f49e | 139 | while(1) { |
MaxScorda | 0:cb2d0eb1f49e | 140 | sleep(); |
MaxScorda | 0:cb2d0eb1f49e | 141 | |
MaxScorda | 0:cb2d0eb1f49e | 142 | if(count >= 8) { |
MaxScorda | 0:cb2d0eb1f49e | 143 | /* |
MaxScorda | 0:cb2d0eb1f49e | 144 | // Go to 'completely dead' mode to show power consumption |
MaxScorda | 0:cb2d0eb1f49e | 145 | refreshTicker.detach(); |
MaxScorda | 0:cb2d0eb1f49e | 146 | capSlider.stop(); |
MaxScorda | 0:cb2d0eb1f49e | 147 | in.disable_irq(); |
MaxScorda | 0:cb2d0eb1f49e | 148 | delete &segmentDisplay; |
MaxScorda | 0:cb2d0eb1f49e | 149 | |
MaxScorda | 0:cb2d0eb1f49e | 150 | */ |
MaxScorda | 0:cb2d0eb1f49e | 151 | } |
MaxScorda | 0:cb2d0eb1f49e | 152 | |
MaxScorda | 0:cb2d0eb1f49e | 153 | } |
MaxScorda | 0:cb2d0eb1f49e | 154 | } |
MaxScorda | 0:cb2d0eb1f49e | 155 |