Bing Zhang / Mbed 2 deprecated ptTouch

Dependencies:   mbed

Committer:
bzhang10
Date:
Tue Nov 30 22:02:31 2010 +0000
Revision:
0:108060161051

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bzhang10 0:108060161051 1 #include "mbed.h"
bzhang10 0:108060161051 2 #include "pt.h"
bzhang10 0:108060161051 3 #define numsamples 1
bzhang10 0:108060161051 4 AnalogIn input(p20);
bzhang10 0:108060161051 5 DigitalIn charger(p19);
bzhang10 0:108060161051 6 DigitalOut ground(p18);
bzhang10 0:108060161051 7 AnalogIn input1(p15);
bzhang10 0:108060161051 8 DigitalIn charger1(p16);
bzhang10 0:108060161051 9 DigitalOut ground1(p17);
bzhang10 0:108060161051 10 DigitalOut myled0(LED1);
bzhang10 0:108060161051 11 DigitalOut myled1(LED2);
bzhang10 0:108060161051 12 DigitalOut myled2(LED3);
bzhang10 0:108060161051 13 DigitalOut myled3(LED4);
bzhang10 0:108060161051 14 Serial pc(USBTX, USBRX); // tx, rx
bzhang10 0:108060161051 15 static int protothreadTS0(struct pt *pt);
bzhang10 0:108060161051 16 static int protothreadTS1(struct pt *pt);
bzhang10 0:108060161051 17 static int protothreadSense(struct pt *pt);
bzhang10 0:108060161051 18 static int protothreadMatch(struct pt *pt);
bzhang10 0:108060161051 19 static int protothreadReport(struct pt *pt);
bzhang10 0:108060161051 20 int TS[2];
bzhang10 0:108060161051 21 int match;
bzhang10 0:108060161051 22 int Tsense;
bzhang10 0:108060161051 23 struct pt ptTS1;
bzhang10 0:108060161051 24 struct pt ptTS0;
bzhang10 0:108060161051 25 struct pt ptSense;
bzhang10 0:108060161051 26 struct pt ptMatch;
bzhang10 0:108060161051 27 struct pt ptReport;
bzhang10 0:108060161051 28 int main() {
bzhang10 0:108060161051 29 while (1) {
bzhang10 0:108060161051 30 protothreadMatch(&ptMatch);
bzhang10 0:108060161051 31 protothreadReport(&ptReport);
bzhang10 0:108060161051 32 }
bzhang10 0:108060161051 33 }
bzhang10 0:108060161051 34 static int protothreadMatch(struct pt *pt) {
bzhang10 0:108060161051 35 PT_BEGIN(pt);
bzhang10 0:108060161051 36 while (1) {
bzhang10 0:108060161051 37 char r;
bzhang10 0:108060161051 38 int sp;
bzhang10 0:108060161051 39 match=1;
bzhang10 0:108060161051 40 r=pc.getc();
bzhang10 0:108060161051 41 while (r!='S') {
bzhang10 0:108060161051 42 r=pc.getc();
bzhang10 0:108060161051 43 }
bzhang10 0:108060161051 44 while ((r!='E')&(match==1)) {
bzhang10 0:108060161051 45 do {
bzhang10 0:108060161051 46 r=pc.getc();
bzhang10 0:108060161051 47 } while ((r!='E')&(r!='0')&(r!='1'));
bzhang10 0:108060161051 48 if (r=='E') {
bzhang10 0:108060161051 49 PT_EXIT(pt);
bzhang10 0:108060161051 50 }
bzhang10 0:108060161051 51 protothreadSense(&ptSense);
bzhang10 0:108060161051 52 sp=Tsense;
bzhang10 0:108060161051 53 if (sp==2) {
bzhang10 0:108060161051 54 match=2;
bzhang10 0:108060161051 55 PT_EXIT(pt);
bzhang10 0:108060161051 56 } else {
bzhang10 0:108060161051 57 if (((sp==1)&(r=='1'))^((sp==0)&(r=='0'))) {
bzhang10 0:108060161051 58 match=1;
bzhang10 0:108060161051 59 } else {
bzhang10 0:108060161051 60 match=0;
bzhang10 0:108060161051 61 PT_EXIT(pt);
bzhang10 0:108060161051 62 }
bzhang10 0:108060161051 63 }
bzhang10 0:108060161051 64 }
bzhang10 0:108060161051 65
bzhang10 0:108060161051 66 }
bzhang10 0:108060161051 67 PT_END(pt);
bzhang10 0:108060161051 68 }
bzhang10 0:108060161051 69 static int protothreadReport(struct pt *pt) {
bzhang10 0:108060161051 70 PT_BEGIN(pt);
bzhang10 0:108060161051 71 switch (match) {
bzhang10 0:108060161051 72 case 0:
bzhang10 0:108060161051 73 pc.printf("HOST ERROR \n\r");
bzhang10 0:108060161051 74 PT_EXIT(pt);
bzhang10 0:108060161051 75 case 1:
bzhang10 0:108060161051 76 pc.printf("MATCH \n\r");
bzhang10 0:108060161051 77 PT_EXIT(pt);
bzhang10 0:108060161051 78 case 2:
bzhang10 0:108060161051 79 pc.printf("Touch Error \n\r");
bzhang10 0:108060161051 80 PT_EXIT(pt);
bzhang10 0:108060161051 81 }
bzhang10 0:108060161051 82 PT_END(pt);
bzhang10 0:108060161051 83 }
bzhang10 0:108060161051 84
bzhang10 0:108060161051 85 static int protothreadSense(struct pt *pt) {
bzhang10 0:108060161051 86 PT_BEGIN(pt);
bzhang10 0:108060161051 87 while (1) {
bzhang10 0:108060161051 88 protothreadTS0(&ptTS0);
bzhang10 0:108060161051 89 protothreadTS1(&ptTS1);
bzhang10 0:108060161051 90 if (TS[0]*TS[1]==1) {
bzhang10 0:108060161051 91 Tsense= 2;
bzhang10 0:108060161051 92 PT_EXIT(pt);
bzhang10 0:108060161051 93 } else {
bzhang10 0:108060161051 94 if (TS[0]==1) {
bzhang10 0:108060161051 95 while (TS[0]==1) {
bzhang10 0:108060161051 96 wait (0.5);
bzhang10 0:108060161051 97 protothreadTS0(&ptTS0);
bzhang10 0:108060161051 98 protothreadTS1(&ptTS1);
bzhang10 0:108060161051 99 if (TS[0]*TS[1]==1) {
bzhang10 0:108060161051 100 Tsense= 2;
bzhang10 0:108060161051 101 PT_EXIT(pt);
bzhang10 0:108060161051 102 }
bzhang10 0:108060161051 103 }
bzhang10 0:108060161051 104 myled0=!myled0;
bzhang10 0:108060161051 105 Tsense= 0;
bzhang10 0:108060161051 106 PT_EXIT(pt);
bzhang10 0:108060161051 107 } else {
bzhang10 0:108060161051 108 if (TS[1]==1) {
bzhang10 0:108060161051 109 while (TS[1]==1) {
bzhang10 0:108060161051 110 wait (0.5);
bzhang10 0:108060161051 111 protothreadTS0(&ptTS0);
bzhang10 0:108060161051 112 protothreadTS1(&ptTS1);
bzhang10 0:108060161051 113 if (TS[0]*TS[1]==1) {
bzhang10 0:108060161051 114 Tsense= 2;
bzhang10 0:108060161051 115 PT_EXIT(pt);
bzhang10 0:108060161051 116 }
bzhang10 0:108060161051 117 }
bzhang10 0:108060161051 118 myled1=!myled1;
bzhang10 0:108060161051 119 Tsense= 1;
bzhang10 0:108060161051 120 PT_EXIT(pt);
bzhang10 0:108060161051 121 }
bzhang10 0:108060161051 122 }
bzhang10 0:108060161051 123 }
bzhang10 0:108060161051 124 wait(0.005);
bzhang10 0:108060161051 125 }
bzhang10 0:108060161051 126 PT_END(pt);
bzhang10 0:108060161051 127 }
bzhang10 0:108060161051 128
bzhang10 0:108060161051 129
bzhang10 0:108060161051 130 static int protothreadTS0(struct pt *pt) {
bzhang10 0:108060161051 131 PT_BEGIN(pt);
bzhang10 0:108060161051 132 float sample;
bzhang10 0:108060161051 133 ground = 0;
bzhang10 0:108060161051 134 charger.mode(PullUp);
bzhang10 0:108060161051 135 charger.mode(PullNone);
bzhang10 0:108060161051 136 sample=input.read();
bzhang10 0:108060161051 137 if (sample < 0.3) {
bzhang10 0:108060161051 138 TS[0]= 1;
bzhang10 0:108060161051 139 } else {
bzhang10 0:108060161051 140 TS[0]= 0;
bzhang10 0:108060161051 141 }
bzhang10 0:108060161051 142 PT_END(pt);
bzhang10 0:108060161051 143 }
bzhang10 0:108060161051 144 static int protothreadTS1(struct pt *pt) {
bzhang10 0:108060161051 145 PT_BEGIN(pt);
bzhang10 0:108060161051 146 float sample;
bzhang10 0:108060161051 147 ground1 = 0;
bzhang10 0:108060161051 148 charger1.mode(PullUp);
bzhang10 0:108060161051 149 charger1.mode(PullNone);
bzhang10 0:108060161051 150 sample=input1.read();
bzhang10 0:108060161051 151 if (sample < 0.3) {
bzhang10 0:108060161051 152 TS[1]= 1;
bzhang10 0:108060161051 153 } else {
bzhang10 0:108060161051 154 TS[1]= 0;
bzhang10 0:108060161051 155 }
bzhang10 0:108060161051 156 PT_END(pt);
bzhang10 0:108060161051 157 }