ssd3341 test of capacitive slider routinesb HW 5.2
Fork of kl46z_slider_v1 by
main.cpp@1:c452326c2800, 2016-09-21 (annotated)
- Committer:
- scohennm
- Date:
- Wed Sep 21 17:57:26 2016 +0000
- Revision:
- 1:c452326c2800
- Parent:
- 0:04499bc54bee
Slider -lightsense program
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
scohennm | 0:04499bc54bee | 1 | #include "mbed.h" |
scohennm | 1:c452326c2800 | 2 | #include <math.h> |
scohennm | 0:04499bc54bee | 3 | #include "TSISensor.h" |
scohennm | 0:04499bc54bee | 4 | #include "SLCD.h" |
scohennm | 1:c452326c2800 | 5 | #define LBUT PTC12 // port addresses for buttons |
scohennm | 1:c452326c2800 | 6 | #define RBUT PTC3 |
scohennm | 0:04499bc54bee | 7 | #define TSILIMIT 0.99 |
scohennm | 1:c452326c2800 | 8 | #define PRINTDELTA 0.01 |
scohennm | 0:04499bc54bee | 9 | #define LCDCHARLEN 10 |
scohennm | 0:04499bc54bee | 10 | #define DATAINTERVAL 0.1 |
scohennm | 1:c452326c2800 | 11 | #define BUTTONTIME 0.3 |
scohennm | 1:c452326c2800 | 12 | #define LCDTIME 0.250 |
scohennm | 1:c452326c2800 | 13 | #define NUMMESS 2 |
scohennm | 1:c452326c2800 | 14 | #define NUMBUTS 2 |
scohennm | 1:c452326c2800 | 15 | #define FLOATDISP 0 |
scohennm | 1:c452326c2800 | 16 | #define UINTDISP 1 |
scohennm | 1:c452326c2800 | 17 | #define BITS16 65536 |
scohennm | 1:c452326c2800 | 18 | #define SHIFT2NUMERALS 100 // divide for right shift - modul |
scohennm | 1:c452326c2800 | 19 | #define RETAIN3NUMERALS 1000 // modulo (%) 1000 |
scohennm | 1:c452326c2800 | 20 | |
scohennm | 1:c452326c2800 | 21 | |
scohennm | 1:c452326c2800 | 22 | #define LIGHTSENSORPORT PTE22 |
scohennm | 1:c452326c2800 | 23 | #define PROGNAME "kl46z_slider_lightsense\n\r" |
scohennm | 0:04499bc54bee | 24 | |
scohennm | 0:04499bc54bee | 25 | SLCD slcd; //define LCD display |
scohennm | 0:04499bc54bee | 26 | Serial pc(USBTX, USBRX); |
scohennm | 0:04499bc54bee | 27 | |
scohennm | 1:c452326c2800 | 28 | // define I/O |
scohennm | 1:c452326c2800 | 29 | PwmOut gled(LED_GREEN); |
scohennm | 1:c452326c2800 | 30 | PwmOut rled(LED_RED); |
scohennm | 1:c452326c2800 | 31 | TSISensor tsi; |
scohennm | 1:c452326c2800 | 32 | |
scohennm | 1:c452326c2800 | 33 | DigitalIn buttons[NUMBUTS] = {RBUT, LBUT}; |
scohennm | 1:c452326c2800 | 34 | AnalogIn LightSensor(LIGHTSENSORPORT); |
scohennm | 1:c452326c2800 | 35 | Timer ButtonTimer; // for reading button states |
scohennm | 1:c452326c2800 | 36 | Timer LCDTimer; |
scohennm | 1:c452326c2800 | 37 | Timer dataTimer; |
scohennm | 1:c452326c2800 | 38 | |
scohennm | 1:c452326c2800 | 39 | // definie an enum for illustration purposes |
scohennm | 1:c452326c2800 | 40 | enum shiftstate_t {right, none, left}; |
scohennm | 1:c452326c2800 | 41 | |
scohennm | 1:c452326c2800 | 42 | int displayState = FLOATDISP; |
scohennm | 1:c452326c2800 | 43 | |
scohennm | 1:c452326c2800 | 44 | unsigned int leftrigntStateMachine( shiftstate_t sState, unsigned int usenseData ){ |
scohennm | 1:c452326c2800 | 45 | unsigned int dataReturn; |
scohennm | 1:c452326c2800 | 46 | |
scohennm | 1:c452326c2800 | 47 | // data shifter state machine |
scohennm | 1:c452326c2800 | 48 | |
scohennm | 1:c452326c2800 | 49 | switch(sState) { |
scohennm | 1:c452326c2800 | 50 | case none: { |
scohennm | 1:c452326c2800 | 51 | dataReturn = usenseData; |
scohennm | 1:c452326c2800 | 52 | break; |
scohennm | 1:c452326c2800 | 53 | } |
scohennm | 1:c452326c2800 | 54 | case right: { |
scohennm | 1:c452326c2800 | 55 | dataReturn = usenseData / SHIFT2NUMERALS; |
scohennm | 1:c452326c2800 | 56 | break; |
scohennm | 1:c452326c2800 | 57 | } |
scohennm | 1:c452326c2800 | 58 | case left: { |
scohennm | 1:c452326c2800 | 59 | dataReturn = usenseData % RETAIN3NUMERALS; |
scohennm | 1:c452326c2800 | 60 | break; |
scohennm | 1:c452326c2800 | 61 | } |
scohennm | 1:c452326c2800 | 62 | } // end switch shiftstate |
scohennm | 1:c452326c2800 | 63 | return (dataReturn); |
scohennm | 1:c452326c2800 | 64 | } |
scohennm | 1:c452326c2800 | 65 | |
scohennm | 1:c452326c2800 | 66 | void initialize_global_vars(){ |
scohennm | 1:c452326c2800 | 67 | pc.printf(PROGNAME); |
scohennm | 1:c452326c2800 | 68 | // set up DAQ timer |
scohennm | 1:c452326c2800 | 69 | ButtonTimer.start(); |
scohennm | 1:c452326c2800 | 70 | ButtonTimer.reset(); |
scohennm | 1:c452326c2800 | 71 | dataTimer.start(); |
scohennm | 1:c452326c2800 | 72 | dataTimer.reset(); |
scohennm | 1:c452326c2800 | 73 | LCDTimer.start(); |
scohennm | 1:c452326c2800 | 74 | LCDTimer.reset(); |
scohennm | 1:c452326c2800 | 75 | |
scohennm | 1:c452326c2800 | 76 | } |
scohennm | 0:04499bc54bee | 77 | |
scohennm | 0:04499bc54bee | 78 | void LCDMess(char *lMess){ |
scohennm | 0:04499bc54bee | 79 | slcd.Home(); |
scohennm | 0:04499bc54bee | 80 | slcd.clear(); |
scohennm | 0:04499bc54bee | 81 | slcd.printf(lMess); |
scohennm | 0:04499bc54bee | 82 | } |
scohennm | 0:04499bc54bee | 83 | |
scohennm | 0:04499bc54bee | 84 | int main(void) { |
scohennm | 1:c452326c2800 | 85 | int i; |
scohennm | 1:c452326c2800 | 86 | unsigned int dataRemainder; |
scohennm | 1:c452326c2800 | 87 | |
scohennm | 0:04499bc54bee | 88 | char lcdData[LCDCHARLEN]; |
scohennm | 1:c452326c2800 | 89 | float tempTouch; |
scohennm | 1:c452326c2800 | 90 | float lastTouch = 0.0; |
scohennm | 1:c452326c2800 | 91 | float tsidata = 0.0; |
scohennm | 1:c452326c2800 | 92 | float lightData; |
scohennm | 1:c452326c2800 | 93 | unsigned int ulightData; |
scohennm | 1:c452326c2800 | 94 | float shiftResult; |
scohennm | 1:c452326c2800 | 95 | |
scohennm | 1:c452326c2800 | 96 | shiftstate_t shiftstate = none; |
scohennm | 1:c452326c2800 | 97 | |
scohennm | 1:c452326c2800 | 98 | |
scohennm | 1:c452326c2800 | 99 | |
scohennm | 1:c452326c2800 | 100 | initialize_global_vars(); |
scohennm | 0:04499bc54bee | 101 | |
scohennm | 0:04499bc54bee | 102 | while (true) { |
scohennm | 1:c452326c2800 | 103 | // read buttons |
scohennm | 1:c452326c2800 | 104 | if (ButtonTimer.read() > BUTTONTIME){ |
scohennm | 1:c452326c2800 | 105 | for (i=0; i<NUMBUTS; i++){ // index will be 0 or 1 |
scohennm | 1:c452326c2800 | 106 | if(!buttons[i]) { |
scohennm | 1:c452326c2800 | 107 | displayState = i; |
scohennm | 1:c452326c2800 | 108 | } // if ! buttons |
scohennm | 1:c452326c2800 | 109 | }// for loop to look at buttons |
scohennm | 1:c452326c2800 | 110 | ButtonTimer.reset(); |
scohennm | 0:04499bc54bee | 111 | } |
scohennm | 1:c452326c2800 | 112 | |
scohennm | 1:c452326c2800 | 113 | // Read touch sensor |
scohennm | 1:c452326c2800 | 114 | if(dataTimer.read() > DATAINTERVAL){ |
scohennm | 1:c452326c2800 | 115 | tempTouch = tsi.readPercentage(); |
scohennm | 1:c452326c2800 | 116 | dataTimer.reset(); |
scohennm | 1:c452326c2800 | 117 | shiftResult = tempTouch -lastTouch; |
scohennm | 1:c452326c2800 | 118 | if (tempTouch > TSILIMIT){ |
scohennm | 1:c452326c2800 | 119 | gled.write(0.0);// turn them off |
scohennm | 1:c452326c2800 | 120 | rled.write(0.0); |
scohennm | 1:c452326c2800 | 121 | }else { |
scohennm | 1:c452326c2800 | 122 | if (fabs(shiftResult) < PRINTDELTA) { |
scohennm | 1:c452326c2800 | 123 | shiftstate = none; |
scohennm | 1:c452326c2800 | 124 | |
scohennm | 1:c452326c2800 | 125 | } else if (shiftResult < 0.0 ) { |
scohennm | 1:c452326c2800 | 126 | shiftstate = left; |
scohennm | 1:c452326c2800 | 127 | |
scohennm | 1:c452326c2800 | 128 | } else { |
scohennm | 1:c452326c2800 | 129 | shiftstate = right; |
scohennm | 1:c452326c2800 | 130 | } |
scohennm | 1:c452326c2800 | 131 | /* |
scohennm | 1:c452326c2800 | 132 | if (fabs(shiftResult)> PRINTDELTA){ |
scohennm | 1:c452326c2800 | 133 | pc.printf("Position %0.4f\n\r", tsidata); |
scohennm | 1:c452326c2800 | 134 | } |
scohennm | 1:c452326c2800 | 135 | */ |
scohennm | 1:c452326c2800 | 136 | tsidata= tempTouch; |
scohennm | 1:c452326c2800 | 137 | gled.write(tsidata); |
scohennm | 1:c452326c2800 | 138 | rled.write(1.0 - tsidata); |
scohennm | 1:c452326c2800 | 139 | lastTouch=tsidata; |
scohennm | 1:c452326c2800 | 140 | } |
scohennm | 1:c452326c2800 | 141 | } |
scohennm | 1:c452326c2800 | 142 | if(LCDTimer.read() > LCDTIME){ |
scohennm | 1:c452326c2800 | 143 | LCDTimer.reset(); |
scohennm | 1:c452326c2800 | 144 | switch (displayState){ |
scohennm | 1:c452326c2800 | 145 | case FLOATDISP: { |
scohennm | 1:c452326c2800 | 146 | lightData = (1.0 - LightSensor.read()); // show as increasiing with increasing intensity |
scohennm | 1:c452326c2800 | 147 | sprintf(lcdData,"%4.3f",lightData); |
scohennm | 1:c452326c2800 | 148 | break; |
scohennm | 1:c452326c2800 | 149 | } |
scohennm | 1:c452326c2800 | 150 | case UINTDISP: { |
scohennm | 1:c452326c2800 | 151 | ulightData = BITS16 - LightSensor. read_u16(); |
scohennm | 1:c452326c2800 | 152 | dataRemainder = leftrigntStateMachine( shiftstate, ulightData); |
scohennm | 1:c452326c2800 | 153 | sprintf(lcdData,"%4d",dataRemainder); |
scohennm | 1:c452326c2800 | 154 | break; |
scohennm | 1:c452326c2800 | 155 | }// end switch displaystate |
scohennm | 1:c452326c2800 | 156 | } |
scohennm | 1:c452326c2800 | 157 | LCDMess(lcdData); |
scohennm | 1:c452326c2800 | 158 | } // end LCD timer.read |
scohennm | 1:c452326c2800 | 159 | |
scohennm | 1:c452326c2800 | 160 | }// end while(true) |
scohennm | 0:04499bc54bee | 161 | } |