Random terror phrases

Dependencies:   EFM32_CapSenseSlider EFM32_SegmentLCD mbed

Fork of EMF32-Segment-Touch-Demo by Max Scordamaglia

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?

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