manu jose
/
TouchSense
2. An implementation of the system as a single program loop
mytouch.cpp@0:d0f22e772042, 2010-11-30 (annotated)
- Committer:
- manujose
- Date:
- Tue Nov 30 22:00:27 2010 +0000
- Revision:
- 0:d0f22e772042
The final revision
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
manujose | 0:d0f22e772042 | 1 | #include "mbed.h" |
manujose | 0:d0f22e772042 | 2 | |
manujose | 0:d0f22e772042 | 3 | #define numsamples 1 |
manujose | 0:d0f22e772042 | 4 | #define ERROR -1 |
manujose | 0:d0f22e772042 | 5 | int touchSense1(void); |
manujose | 0:d0f22e772042 | 6 | int touchSense2(void); |
manujose | 0:d0f22e772042 | 7 | int getTouch(void); |
manujose | 0:d0f22e772042 | 8 | void hostError(void); |
manujose | 0:d0f22e772042 | 9 | void touchError(void); |
manujose | 0:d0f22e772042 | 10 | DigitalOut myled1(LED1); |
manujose | 0:d0f22e772042 | 11 | DigitalOut myled2(LED3); |
manujose | 0:d0f22e772042 | 12 | |
manujose | 0:d0f22e772042 | 13 | AnalogIn input1(p20); |
manujose | 0:d0f22e772042 | 14 | AnalogIn input2(p15); |
manujose | 0:d0f22e772042 | 15 | |
manujose | 0:d0f22e772042 | 16 | DigitalIn charger1(p19); |
manujose | 0:d0f22e772042 | 17 | DigitalIn charger2(p16); |
manujose | 0:d0f22e772042 | 18 | |
manujose | 0:d0f22e772042 | 19 | DigitalOut ground1(p18); |
manujose | 0:d0f22e772042 | 20 | DigitalOut ground2(p17); |
manujose | 0:d0f22e772042 | 21 | Serial pc(USBTX, USBRX); // tx, rx |
manujose | 0:d0f22e772042 | 22 | #define DEBUG 1 |
manujose | 0:d0f22e772042 | 23 | int main() { |
manujose | 0:d0f22e772042 | 24 | char A[1024],c; |
manujose | 0:d0f22e772042 | 25 | int len, i, t_bit, h_bit; |
manujose | 0:d0f22e772042 | 26 | while (1) { |
manujose | 0:d0f22e772042 | 27 | START: |
manujose | 0:d0f22e772042 | 28 | |
manujose | 0:d0f22e772042 | 29 | c = 'k'; //random no. |
manujose | 0:d0f22e772042 | 30 | i = 0; |
manujose | 0:d0f22e772042 | 31 | if(pc.readable()) |
manujose | 0:d0f22e772042 | 32 | { |
manujose | 0:d0f22e772042 | 33 | #ifdef DEBUG |
manujose | 0:d0f22e772042 | 34 | pc.printf("DBG: Got a Host String:\n"); |
manujose | 0:d0f22e772042 | 35 | #endif |
manujose | 0:d0f22e772042 | 36 | while(pc.readable() && c!='S') |
manujose | 0:d0f22e772042 | 37 | c = pc.getc(); |
manujose | 0:d0f22e772042 | 38 | |
manujose | 0:d0f22e772042 | 39 | while(pc.readable() && (c != 'E')) |
manujose | 0:d0f22e772042 | 40 | { |
manujose | 0:d0f22e772042 | 41 | if(c != ' ') |
manujose | 0:d0f22e772042 | 42 | { |
manujose | 0:d0f22e772042 | 43 | //if((c == '0') || (c=='1')) |
manujose | 0:d0f22e772042 | 44 | A[i++] = c; |
manujose | 0:d0f22e772042 | 45 | if((i>1) && (c!='0') &&(c!='1')) |
manujose | 0:d0f22e772042 | 46 | { |
manujose | 0:d0f22e772042 | 47 | hostError(); |
manujose | 0:d0f22e772042 | 48 | while(pc.readable()) |
manujose | 0:d0f22e772042 | 49 | c=pc.getc(); |
manujose | 0:d0f22e772042 | 50 | goto START; |
manujose | 0:d0f22e772042 | 51 | } |
manujose | 0:d0f22e772042 | 52 | |
manujose | 0:d0f22e772042 | 53 | } |
manujose | 0:d0f22e772042 | 54 | // pc.printf("READING %c \n",c); |
manujose | 0:d0f22e772042 | 55 | c = pc.getc(); |
manujose | 0:d0f22e772042 | 56 | } |
manujose | 0:d0f22e772042 | 57 | A[i] = c; |
manujose | 0:d0f22e772042 | 58 | A[i+1]='\0'; |
manujose | 0:d0f22e772042 | 59 | while(pc.readable()) //bufferout rest; |
manujose | 0:d0f22e772042 | 60 | c=pc.getc(); |
manujose | 0:d0f22e772042 | 61 | pc.printf("DATA RECV : %s\n",A); |
manujose | 0:d0f22e772042 | 62 | len = strlen(A)-1; //to make it right offset |
manujose | 0:d0f22e772042 | 63 | if ((A[0]!='S') || (A[len] != 'E')) { |
manujose | 0:d0f22e772042 | 64 | hostError(); |
manujose | 0:d0f22e772042 | 65 | goto START; |
manujose | 0:d0f22e772042 | 66 | } |
manujose | 0:d0f22e772042 | 67 | i = 1; |
manujose | 0:d0f22e772042 | 68 | while (i<len) { |
manujose | 0:d0f22e772042 | 69 | t_bit = getTouch(); |
manujose | 0:d0f22e772042 | 70 | pc.printf("\n MY TOKEN IS %c and touch is %d\n",A[i],t_bit); |
manujose | 0:d0f22e772042 | 71 | if (A[i] == '0') |
manujose | 0:d0f22e772042 | 72 | h_bit = 0; |
manujose | 0:d0f22e772042 | 73 | else if (A[i] == '1') |
manujose | 0:d0f22e772042 | 74 | h_bit = 1; |
manujose | 0:d0f22e772042 | 75 | |
manujose | 0:d0f22e772042 | 76 | if (t_bit != h_bit) { |
manujose | 0:d0f22e772042 | 77 | touchError(); |
manujose | 0:d0f22e772042 | 78 | goto START; |
manujose | 0:d0f22e772042 | 79 | } |
manujose | 0:d0f22e772042 | 80 | i++; |
manujose | 0:d0f22e772042 | 81 | } |
manujose | 0:d0f22e772042 | 82 | pc.printf("MATCH\n"); |
manujose | 0:d0f22e772042 | 83 | } |
manujose | 0:d0f22e772042 | 84 | wait(0.001); |
manujose | 0:d0f22e772042 | 85 | } |
manujose | 0:d0f22e772042 | 86 | } |
manujose | 0:d0f22e772042 | 87 | int getTouch(void) { |
manujose | 0:d0f22e772042 | 88 | int sens; |
manujose | 0:d0f22e772042 | 89 | while (1) { |
manujose | 0:d0f22e772042 | 90 | |
manujose | 0:d0f22e772042 | 91 | sens = 0; |
manujose | 0:d0f22e772042 | 92 | if (touchSense1()) { |
manujose | 0:d0f22e772042 | 93 | wait_ms(5); |
manujose | 0:d0f22e772042 | 94 | while(touchSense1()) |
manujose | 0:d0f22e772042 | 95 | { |
manujose | 0:d0f22e772042 | 96 | // pc.printf("In touchsense1\n"); |
manujose | 0:d0f22e772042 | 97 | sens = 1; |
manujose | 0:d0f22e772042 | 98 | wait_ms(100); |
manujose | 0:d0f22e772042 | 99 | } |
manujose | 0:d0f22e772042 | 100 | if(sens) |
manujose | 0:d0f22e772042 | 101 | return 0; |
manujose | 0:d0f22e772042 | 102 | } |
manujose | 0:d0f22e772042 | 103 | |
manujose | 0:d0f22e772042 | 104 | if (touchSense2()) { |
manujose | 0:d0f22e772042 | 105 | wait_ms(5); |
manujose | 0:d0f22e772042 | 106 | while(touchSense2()) |
manujose | 0:d0f22e772042 | 107 | { |
manujose | 0:d0f22e772042 | 108 | // pc.printf("In touchsense2\n"); |
manujose | 0:d0f22e772042 | 109 | sens = 1; |
manujose | 0:d0f22e772042 | 110 | wait_ms(100); |
manujose | 0:d0f22e772042 | 111 | } |
manujose | 0:d0f22e772042 | 112 | if(sens) |
manujose | 0:d0f22e772042 | 113 | return 1; |
manujose | 0:d0f22e772042 | 114 | } |
manujose | 0:d0f22e772042 | 115 | } |
manujose | 0:d0f22e772042 | 116 | } |
manujose | 0:d0f22e772042 | 117 | |
manujose | 0:d0f22e772042 | 118 | int touchSense1(void) { |
manujose | 0:d0f22e772042 | 119 | float sample; |
manujose | 0:d0f22e772042 | 120 | ground1 = 0; |
manujose | 0:d0f22e772042 | 121 | charger1.mode(PullUp); |
manujose | 0:d0f22e772042 | 122 | charger1.mode(PullNone); |
manujose | 0:d0f22e772042 | 123 | sample=input1.read(); |
manujose | 0:d0f22e772042 | 124 | if (sample < 0.3) { |
manujose | 0:d0f22e772042 | 125 | return 1; |
manujose | 0:d0f22e772042 | 126 | } else { |
manujose | 0:d0f22e772042 | 127 | return 0; |
manujose | 0:d0f22e772042 | 128 | } |
manujose | 0:d0f22e772042 | 129 | } |
manujose | 0:d0f22e772042 | 130 | |
manujose | 0:d0f22e772042 | 131 | int touchSense2(void) { |
manujose | 0:d0f22e772042 | 132 | float sample; |
manujose | 0:d0f22e772042 | 133 | ground2 = 0; |
manujose | 0:d0f22e772042 | 134 | charger2.mode(PullUp); |
manujose | 0:d0f22e772042 | 135 | charger2.mode(PullNone); |
manujose | 0:d0f22e772042 | 136 | sample=input2.read(); |
manujose | 0:d0f22e772042 | 137 | if (sample < 0.3) { |
manujose | 0:d0f22e772042 | 138 | return 1; |
manujose | 0:d0f22e772042 | 139 | } else { |
manujose | 0:d0f22e772042 | 140 | return 0; |
manujose | 0:d0f22e772042 | 141 | } |
manujose | 0:d0f22e772042 | 142 | } |
manujose | 0:d0f22e772042 | 143 | |
manujose | 0:d0f22e772042 | 144 | void hostError() { |
manujose | 0:d0f22e772042 | 145 | pc.printf("HOST ERROR"); |
manujose | 0:d0f22e772042 | 146 | } |
manujose | 0:d0f22e772042 | 147 | void touchError() { |
manujose | 0:d0f22e772042 | 148 | pc.printf("TOUCH ERROR"); |
manujose | 0:d0f22e772042 | 149 | } |