Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:108060161051, 2010-11-30 (annotated)
- Committer:
- bzhang10
- Date:
- Tue Nov 30 22:02:31 2010 +0000
- Revision:
- 0:108060161051
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |