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