Xinda Lin / Mbed 2 deprecated pttest

Dependencies:   mbed

Committer:
linxinda
Date:
Wed Dec 01 05:29:33 2010 +0000
Revision:
0:9e40bae04a53
hw2.4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
linxinda 0:9e40bae04a53 1 #include "mbed.h"
linxinda 0:9e40bae04a53 2 #include "pt.h"
linxinda 0:9e40bae04a53 3
linxinda 0:9e40bae04a53 4 #define numsamples 1
linxinda 0:9e40bae04a53 5 int touchSense1(void);
linxinda 0:9e40bae04a53 6 int touchSense2(void);
linxinda 0:9e40bae04a53 7 void readSerial();
linxinda 0:9e40bae04a53 8 char touchDetect ();
linxinda 0:9e40bae04a53 9
linxinda 0:9e40bae04a53 10 DigitalOut myled1(LED1);
linxinda 0:9e40bae04a53 11 DigitalOut myled2(LED2);
linxinda 0:9e40bae04a53 12 DigitalOut myled3(LED3);
linxinda 0:9e40bae04a53 13 AnalogIn input1(p20);
linxinda 0:9e40bae04a53 14 DigitalIn charger1(p19);
linxinda 0:9e40bae04a53 15 DigitalOut ground1(p18);
linxinda 0:9e40bae04a53 16 AnalogIn input2(p17);
linxinda 0:9e40bae04a53 17 DigitalIn charger2(p16);
linxinda 0:9e40bae04a53 18 DigitalOut ground2(p15);
linxinda 0:9e40bae04a53 19
linxinda 0:9e40bae04a53 20
linxinda 0:9e40bae04a53 21 Serial pc(USBTX, USBRX); // tx, rx
linxinda 0:9e40bae04a53 22
linxinda 0:9e40bae04a53 23 char *host = new char [100];
linxinda 0:9e40bae04a53 24 char *input = new char [100];
linxinda 0:9e40bae04a53 25 static struct pt serial_pt, match_pt;
linxinda 0:9e40bae04a53 26 static int Thread=0;
linxinda 0:9e40bae04a53 27 static
linxinda 0:9e40bae04a53 28 PT_THREAD(serial(struct pt *pt)) //Thread to read the host serial
linxinda 0:9e40bae04a53 29 {
linxinda 0:9e40bae04a53 30 PT_BEGIN(pt);
linxinda 0:9e40bae04a53 31 while (1){
linxinda 0:9e40bae04a53 32 PT_WAIT_UNTIL(pt, pc.readable()==1);
linxinda 0:9e40bae04a53 33 readSerial();
linxinda 0:9e40bae04a53 34 Thread=0;
linxinda 0:9e40bae04a53 35 }
linxinda 0:9e40bae04a53 36 PT_END(pt);
linxinda 0:9e40bae04a53 37 }
linxinda 0:9e40bae04a53 38
linxinda 0:9e40bae04a53 39 static
linxinda 0:9e40bae04a53 40 PT_THREAD(match(struct pt *pt)) //Thread to do the comparation
linxinda 0:9e40bae04a53 41 {
linxinda 0:9e40bae04a53 42 PT_BEGIN(pt);
linxinda 0:9e40bae04a53 43 while (1){
linxinda 0:9e40bae04a53 44 PT_WAIT_UNTIL(pt, Thread == 1);
linxinda 0:9e40bae04a53 45 pc.printf (" MATCH ");
linxinda 0:9e40bae04a53 46 pc.printf ("\r\n");
linxinda 0:9e40bae04a53 47 Thread=0;
linxinda 0:9e40bae04a53 48 }
linxinda 0:9e40bae04a53 49 PT_END(pt);
linxinda 0:9e40bae04a53 50
linxinda 0:9e40bae04a53 51 }
linxinda 0:9e40bae04a53 52
linxinda 0:9e40bae04a53 53 int main() {
linxinda 0:9e40bae04a53 54 PT_INIT(&serial_pt);
linxinda 0:9e40bae04a53 55 PT_INIT(&match_pt);
linxinda 0:9e40bae04a53 56 serial(&serial_pt);
linxinda 0:9e40bae04a53 57
linxinda 0:9e40bae04a53 58 while (1){
linxinda 0:9e40bae04a53 59 serial(&serial_pt);
linxinda 0:9e40bae04a53 60 match(&match_pt);
linxinda 0:9e40bae04a53 61 int j=0, i=1, flag=1;
linxinda 0:9e40bae04a53 62 while (flag) { //Print the host value;
linxinda 0:9e40bae04a53 63 pc.printf ("%c", host[j]);
linxinda 0:9e40bae04a53 64 if (host[j]=='E'){
linxinda 0:9e40bae04a53 65 flag=0; }
linxinda 0:9e40bae04a53 66 j++;
linxinda 0:9e40bae04a53 67 }
linxinda 0:9e40bae04a53 68
linxinda 0:9e40bae04a53 69 while (1) {
linxinda 0:9e40bae04a53 70 serial(&serial_pt);
linxinda 0:9e40bae04a53 71 match(&match_pt);
linxinda 0:9e40bae04a53 72 if (host[i]=='E'){
linxinda 0:9e40bae04a53 73 Thread=1;
linxinda 0:9e40bae04a53 74 i=1;
linxinda 0:9e40bae04a53 75 break;
linxinda 0:9e40bae04a53 76 }
linxinda 0:9e40bae04a53 77 else if (host[i]==touchDetect()){
linxinda 0:9e40bae04a53 78 i++;
linxinda 0:9e40bae04a53 79 wait (0.5);
linxinda 0:9e40bae04a53 80 }
linxinda 0:9e40bae04a53 81 else{
linxinda 0:9e40bae04a53 82 pc.printf (" TOUCH ERROR ");
linxinda 0:9e40bae04a53 83 pc.printf ("\r\n");
linxinda 0:9e40bae04a53 84 break;}
linxinda 0:9e40bae04a53 85 }
linxinda 0:9e40bae04a53 86 }
linxinda 0:9e40bae04a53 87 }
linxinda 0:9e40bae04a53 88
linxinda 0:9e40bae04a53 89
linxinda 0:9e40bae04a53 90 void readSerial() //Read host serial value
linxinda 0:9e40bae04a53 91 {
linxinda 0:9e40bae04a53 92 char b;
linxinda 0:9e40bae04a53 93 int flag=1,i=0;
linxinda 0:9e40bae04a53 94 b=pc.getc();
linxinda 0:9e40bae04a53 95 if (b=='S'){
linxinda 0:9e40bae04a53 96 host[0]='S';
linxinda 0:9e40bae04a53 97 i++;
linxinda 0:9e40bae04a53 98 while (flag){
linxinda 0:9e40bae04a53 99 host[i]=pc.getc();
linxinda 0:9e40bae04a53 100 if (host[i]=='E'){
linxinda 0:9e40bae04a53 101 flag=0;}
linxinda 0:9e40bae04a53 102 else if (host[i]==' '){
linxinda 0:9e40bae04a53 103 i--;}
linxinda 0:9e40bae04a53 104 else if (host[i]=='S'){
linxinda 0:9e40bae04a53 105 pc.printf (" HOST ERROR \r\n ");
linxinda 0:9e40bae04a53 106 break;}
linxinda 0:9e40bae04a53 107 i++;
linxinda 0:9e40bae04a53 108 }
linxinda 0:9e40bae04a53 109 }
linxinda 0:9e40bae04a53 110 }
linxinda 0:9e40bae04a53 111
linxinda 0:9e40bae04a53 112 char touchDetect () //Detect the user input
linxinda 0:9e40bae04a53 113 {
linxinda 0:9e40bae04a53 114 while (1) {
linxinda 0:9e40bae04a53 115 if (touchSense1()){
linxinda 0:9e40bae04a53 116 pc.printf (" T1 "); //T1 means sensor1 is touched
linxinda 0:9e40bae04a53 117 if (touchSense2()){
linxinda 0:9e40bae04a53 118 return '3';
linxinda 0:9e40bae04a53 119 }
linxinda 0:9e40bae04a53 120 while (touchSense1()){
linxinda 0:9e40bae04a53 121 wait(0.5);}
linxinda 0:9e40bae04a53 122 return '1';
linxinda 0:9e40bae04a53 123 }
linxinda 0:9e40bae04a53 124 else if (touchSense2()){ //T0 means sensor2 is touched
linxinda 0:9e40bae04a53 125 pc.printf (" T0 ");
linxinda 0:9e40bae04a53 126 if (touchSense1()){
linxinda 0:9e40bae04a53 127 return '3';
linxinda 0:9e40bae04a53 128 }
linxinda 0:9e40bae04a53 129 while (touchSense2()){
linxinda 0:9e40bae04a53 130 wait(0.5);}
linxinda 0:9e40bae04a53 131 return '0';
linxinda 0:9e40bae04a53 132
linxinda 0:9e40bae04a53 133 }
linxinda 0:9e40bae04a53 134 wait (0.05);
linxinda 0:9e40bae04a53 135 }
linxinda 0:9e40bae04a53 136 }
linxinda 0:9e40bae04a53 137
linxinda 0:9e40bae04a53 138 int touchSense1(void)
linxinda 0:9e40bae04a53 139 {
linxinda 0:9e40bae04a53 140 float sample;
linxinda 0:9e40bae04a53 141 ground1 = 0;
linxinda 0:9e40bae04a53 142 charger1.mode(PullUp);
linxinda 0:9e40bae04a53 143 charger1.mode(PullNone);
linxinda 0:9e40bae04a53 144 sample=input1.read();
linxinda 0:9e40bae04a53 145 if (sample < 0.3) {
linxinda 0:9e40bae04a53 146 return 1;
linxinda 0:9e40bae04a53 147 } else {
linxinda 0:9e40bae04a53 148 return 0;
linxinda 0:9e40bae04a53 149 }
linxinda 0:9e40bae04a53 150 }
linxinda 0:9e40bae04a53 151
linxinda 0:9e40bae04a53 152 int touchSense2(void)
linxinda 0:9e40bae04a53 153 {
linxinda 0:9e40bae04a53 154 float sample;
linxinda 0:9e40bae04a53 155 ground2 = 0;
linxinda 0:9e40bae04a53 156 charger2.mode(PullUp);
linxinda 0:9e40bae04a53 157 charger2.mode(PullNone);
linxinda 0:9e40bae04a53 158 sample=input2.read();
linxinda 0:9e40bae04a53 159 if (sample < 0.3) {
linxinda 0:9e40bae04a53 160 return 1;
linxinda 0:9e40bae04a53 161 } else {
linxinda 0:9e40bae04a53 162 return 0;
linxinda 0:9e40bae04a53 163 }
linxinda 0:9e40bae04a53 164 }
linxinda 0:9e40bae04a53 165
linxinda 0:9e40bae04a53 166