None

Dependencies:   mbed

Committer:
henryeherman
Date:
Wed Dec 01 03:28:28 2010 +0000
Revision:
0:6ae7b9747a06
A

Who changed what in which revision?

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