b

Committer:
henryeherman
Date:
Wed Dec 01 03:29:25 2010 +0000
Revision:
0:4841f4169944

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
henryeherman 0:4841f4169944 1 #include "mbed.h"
henryeherman 0:4841f4169944 2 #include "touchbutton.h"
henryeherman 0:4841f4169944 3 #include "com.h"
henryeherman 0:4841f4169944 4
henryeherman 0:4841f4169944 5 #ifdef DEBUGTOUCHLED
henryeherman 0:4841f4169944 6 DigitalOut debugled(LED1);
henryeherman 0:4841f4169944 7 #endif
henryeherman 0:4841f4169944 8
henryeherman 0:4841f4169944 9 float TouchButton::difference() {
henryeherman 0:4841f4169944 10 return previousValue - currentValue;
henryeherman 0:4841f4169944 11 }
henryeherman 0:4841f4169944 12
henryeherman 0:4841f4169944 13 TouchButton::TouchButton(PinName ain, PinName din, PinName dout, float threshold, int debounceTime, char *nm) : sensor(ain), charger(din), ground(dout) {
henryeherman 0:4841f4169944 14
henryeherman 0:4841f4169944 15 setThreshold(threshold);
henryeherman 0:4841f4169944 16 setDebounceTime(debounceTime);
henryeherman 0:4841f4169944 17 AnalogIn sensor(ain);
henryeherman 0:4841f4169944 18 DigitalIn charger(din);
henryeherman 0:4841f4169944 19 DigitalOut ground(dout);
henryeherman 0:4841f4169944 20 ground.write(0);
henryeherman 0:4841f4169944 21 timer.start();
henryeherman 0:4841f4169944 22 sample();
henryeherman 0:4841f4169944 23 storeValue();
henryeherman 0:4841f4169944 24 strcpy(name,nm);
henryeherman 0:4841f4169944 25 #ifdef DEBUGTOUCH
henryeherman 0:4841f4169944 26 com.printf("INIT BUTTON %s\r\n",name);
henryeherman 0:4841f4169944 27 #endif
henryeherman 0:4841f4169944 28 }
henryeherman 0:4841f4169944 29
henryeherman 0:4841f4169944 30 void TouchButton::storeValue() {
henryeherman 0:4841f4169944 31 previousValue=currentValue;
henryeherman 0:4841f4169944 32 }
henryeherman 0:4841f4169944 33
henryeherman 0:4841f4169944 34 void TouchButton::setThreshold(float level) {
henryeherman 0:4841f4169944 35 analogThreshold = level;
henryeherman 0:4841f4169944 36 }
henryeherman 0:4841f4169944 37
henryeherman 0:4841f4169944 38 void TouchButton::setDebounceTime(int t) {
henryeherman 0:4841f4169944 39 timeout_ms = t;
henryeherman 0:4841f4169944 40 }
henryeherman 0:4841f4169944 41
henryeherman 0:4841f4169944 42 bool TouchButton::checkState() {
henryeherman 0:4841f4169944 43 float diff;
henryeherman 0:4841f4169944 44 #ifdef DEBUGTOUCH
henryeherman 0:4841f4169944 45 com.printf("CHECK BUTTON\r\n");
henryeherman 0:4841f4169944 46 #endif
henryeherman 0:4841f4169944 47
henryeherman 0:4841f4169944 48 charge();
henryeherman 0:4841f4169944 49 #ifdef DEBUGTOUCH
henryeherman 0:4841f4169944 50 com.printf("CHARGE BUTTON\r\n");
henryeherman 0:4841f4169944 51 #endif
henryeherman 0:4841f4169944 52 sample();
henryeherman 0:4841f4169944 53 #ifdef DEBUGTOUCH
henryeherman 0:4841f4169944 54 com.printf("CHARGE & SAMPLE BUTTON %s\r\n",name);
henryeherman 0:4841f4169944 55 com.printf("Value:%3.2f\r\n", currentValue);
henryeherman 0:4841f4169944 56 #endif
henryeherman 0:4841f4169944 57
henryeherman 0:4841f4169944 58
henryeherman 0:4841f4169944 59 diff=previousValue - currentValue;
henryeherman 0:4841f4169944 60 storeValue();
henryeherman 0:4841f4169944 61 if (diff > analogThreshold && timer.read_ms() > timeout_ms) {
henryeherman 0:4841f4169944 62 timer.reset();
henryeherman 0:4841f4169944 63 #ifdef DEBUGTOUCH
henryeherman 0:4841f4169944 64 com.printf("TOUCH %s\r\n", name);
henryeherman 0:4841f4169944 65 #endif
henryeherman 0:4841f4169944 66 #ifdef DEBUGTOUCHLED
henryeherman 0:4841f4169944 67 //Toggle LED to show touch was registered
henryeherman 0:4841f4169944 68 if (debugled.read()==1)
henryeherman 0:4841f4169944 69 debugled=0;
henryeherman 0:4841f4169944 70 else
henryeherman 0:4841f4169944 71 debugled=1;
henryeherman 0:4841f4169944 72 #endif
henryeherman 0:4841f4169944 73 return true;
henryeherman 0:4841f4169944 74 } else {
henryeherman 0:4841f4169944 75 return false;
henryeherman 0:4841f4169944 76 }
henryeherman 0:4841f4169944 77
henryeherman 0:4841f4169944 78 }
henryeherman 0:4841f4169944 79
henryeherman 0:4841f4169944 80 float TouchButton::sample() {
henryeherman 0:4841f4169944 81
henryeherman 0:4841f4169944 82 float sum = 0;
henryeherman 0:4841f4169944 83 for (int i=0; i<NUMSAMP;i++) {
henryeherman 0:4841f4169944 84 float value = sensor.read();
henryeherman 0:4841f4169944 85 sum = sum + value;
henryeherman 0:4841f4169944 86 }
henryeherman 0:4841f4169944 87 currentValue = sum/NUMSAMP;
henryeherman 0:4841f4169944 88 return currentValue;
henryeherman 0:4841f4169944 89
henryeherman 0:4841f4169944 90 }
henryeherman 0:4841f4169944 91
henryeherman 0:4841f4169944 92 void TouchButton::charge() {
henryeherman 0:4841f4169944 93 charger.mode(PullUp);
henryeherman 0:4841f4169944 94 charger.mode(PullNone);
henryeherman 0:4841f4169944 95 wait(.005);
henryeherman 0:4841f4169944 96
henryeherman 0:4841f4169944 97 }