Currently a giant piece of crap, this library is just a quick way to get cheap inputs out of scrap parts. I will fix it up eventually so if you decide to use it now you do so at your own risk. Also, if you are allergic to moronic library names you probably do not want to touch this :)

Committer:
Nakor
Date:
Mon Jan 31 03:20:18 2011 +0000
Revision:
1:69d0b1c11c73
Parent:
0:8ab3a8aaf559
Child:
2:cc7e700413d4
Fixed ghost touches.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nakor 0:8ab3a8aaf559 1 #include "mbed.h"
Nakor 0:8ab3a8aaf559 2 #include "theBadTouch.h"
Nakor 0:8ab3a8aaf559 3
Nakor 0:8ab3a8aaf559 4
Nakor 0:8ab3a8aaf559 5 theBadTouch::theBadTouch(PinName touchPin, PinName sink)
Nakor 0:8ab3a8aaf559 6 {
Nakor 0:8ab3a8aaf559 7 _sensor = touchPin;
Nakor 0:8ab3a8aaf559 8 //_sink = sink;
Nakor 0:8ab3a8aaf559 9 _sink = new DigitalIn(sink);
Nakor 0:8ab3a8aaf559 10 _sink->mode(PullUp);
Nakor 0:8ab3a8aaf559 11 tracker1 = false;
Nakor 0:8ab3a8aaf559 12 tracker2 = false;
Nakor 0:8ab3a8aaf559 13 _touchFlag = 0x00;
Nakor 0:8ab3a8aaf559 14 falseCounter = 0;
Nakor 0:8ab3a8aaf559 15 t.start();
Nakor 0:8ab3a8aaf559 16 t_off.start();
Nakor 1:69d0b1c11c73 17 _touchCounter = 0x00;
Nakor 0:8ab3a8aaf559 18 }
Nakor 0:8ab3a8aaf559 19
Nakor 0:8ab3a8aaf559 20
Nakor 0:8ab3a8aaf559 21
Nakor 0:8ab3a8aaf559 22 /******************/
Nakor 0:8ab3a8aaf559 23 /* Protected */
Nakor 0:8ab3a8aaf559 24 /******************/
Nakor 0:8ab3a8aaf559 25
Nakor 0:8ab3a8aaf559 26
Nakor 0:8ab3a8aaf559 27
Nakor 0:8ab3a8aaf559 28
Nakor 0:8ab3a8aaf559 29 /******************/
Nakor 0:8ab3a8aaf559 30 /* Public */
Nakor 0:8ab3a8aaf559 31 /******************/
Nakor 0:8ab3a8aaf559 32 // _touchFlag
Nakor 0:8ab3a8aaf559 33 // 0x00 = Free (untouched long enough to be available for instant touch)
Nakor 0:8ab3a8aaf559 34 // 0x01 = being touched
Nakor 0:8ab3a8aaf559 35 // 0x02 = Timing length of time sensor is untouched
Nakor 0:8ab3a8aaf559 36
Nakor 0:8ab3a8aaf559 37 char theBadTouch::isTouch()
Nakor 0:8ab3a8aaf559 38 {
Nakor 0:8ab3a8aaf559 39 if(falseCounter > 20)
Nakor 0:8ab3a8aaf559 40 {
Nakor 0:8ab3a8aaf559 41 _untouchedFlag = 0x01;
Nakor 0:8ab3a8aaf559 42 falseCounter = 0;
Nakor 0:8ab3a8aaf559 43 return 0x00;
Nakor 0:8ab3a8aaf559 44 }
Nakor 1:69d0b1c11c73 45
Nakor 1:69d0b1c11c73 46
Nakor 1:69d0b1c11c73 47
Nakor 0:8ab3a8aaf559 48
Nakor 0:8ab3a8aaf559 49 if(badPlace() >= 1.0)
Nakor 0:8ab3a8aaf559 50 {
Nakor 1:69d0b1c11c73 51 if(_touchCounter < 0x01)
Nakor 1:69d0b1c11c73 52 {
Nakor 1:69d0b1c11c73 53 _touchCounter++;
Nakor 1:69d0b1c11c73 54 return false;
Nakor 1:69d0b1c11c73 55 }
Nakor 1:69d0b1c11c73 56 else
Nakor 1:69d0b1c11c73 57 {
Nakor 1:69d0b1c11c73 58 _touchCounter = 0x00;
Nakor 1:69d0b1c11c73 59 }
Nakor 1:69d0b1c11c73 60
Nakor 0:8ab3a8aaf559 61 if(_untouchedFlag == 0x01)
Nakor 0:8ab3a8aaf559 62 {
Nakor 0:8ab3a8aaf559 63 _untouchedFlag = 0x00;
Nakor 0:8ab3a8aaf559 64 return 0x01;
Nakor 0:8ab3a8aaf559 65 }
Nakor 0:8ab3a8aaf559 66 else
Nakor 0:8ab3a8aaf559 67 {
Nakor 0:8ab3a8aaf559 68 t.reset();
Nakor 0:8ab3a8aaf559 69 for(int i = 0; i < 20; i++)
Nakor 0:8ab3a8aaf559 70 {
Nakor 0:8ab3a8aaf559 71 while(badPlace() >= 1.0)
Nakor 0:8ab3a8aaf559 72 {
Nakor 0:8ab3a8aaf559 73 if(t.read_ms() > 300)
Nakor 0:8ab3a8aaf559 74 {
Nakor 0:8ab3a8aaf559 75 return 0x02;
Nakor 0:8ab3a8aaf559 76 }
Nakor 0:8ab3a8aaf559 77 }
Nakor 0:8ab3a8aaf559 78 }
Nakor 0:8ab3a8aaf559 79 }
Nakor 0:8ab3a8aaf559 80 }
Nakor 0:8ab3a8aaf559 81 else
Nakor 0:8ab3a8aaf559 82 {
Nakor 0:8ab3a8aaf559 83 falseCounter++;
Nakor 0:8ab3a8aaf559 84 return 0x00;
Nakor 0:8ab3a8aaf559 85 }
Nakor 0:8ab3a8aaf559 86
Nakor 0:8ab3a8aaf559 87 return 0x00;
Nakor 0:8ab3a8aaf559 88 }
Nakor 0:8ab3a8aaf559 89
Nakor 0:8ab3a8aaf559 90 float theBadTouch::badPlace()
Nakor 0:8ab3a8aaf559 91 {
Nakor 0:8ab3a8aaf559 92 _precharge = new DigitalInOut(_sensor);
Nakor 0:8ab3a8aaf559 93 _precharge->output();
Nakor 0:8ab3a8aaf559 94 (*_precharge) = 1;
Nakor 0:8ab3a8aaf559 95 _precharge->input();
Nakor 0:8ab3a8aaf559 96 _precharge->mode(PullNone);
Nakor 0:8ab3a8aaf559 97 delete _precharge;
Nakor 0:8ab3a8aaf559 98 wait_ms(10);
Nakor 0:8ab3a8aaf559 99 _sense = new AnalogIn(_sensor);
Nakor 0:8ab3a8aaf559 100 float value = *_sense;
Nakor 0:8ab3a8aaf559 101 delete _sense;
Nakor 0:8ab3a8aaf559 102
Nakor 0:8ab3a8aaf559 103 return value;
Nakor 0:8ab3a8aaf559 104 }