ssd3341 test of capacitive slider routinesb HW 5.2

Dependencies:   SLCD TSI mbed

Fork of kl46z_slider_v1 by Stanley Cohen

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?

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