Yan Wang / Mbed 2 deprecated ForeBackGround
Committer:
phyllis
Date:
Tue Nov 30 22:14:03 2010 +0000
Revision:
0:c3c4f3479042

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
phyllis 0:c3c4f3479042 1 #include "mbed.h"
phyllis 0:c3c4f3479042 2
phyllis 0:c3c4f3479042 3 void serial_interrupt( );
phyllis 0:c3c4f3479042 4 void readstring(char c);
phyllis 0:c3c4f3479042 5 int touchSense( );
phyllis 0:c3c4f3479042 6 char readkey( );
phyllis 0:c3c4f3479042 7
phyllis 0:c3c4f3479042 8 Serial pc(USBTX, USBRX); // tx, rx
phyllis 0:c3c4f3479042 9 AnalogIn input0(p20);
phyllis 0:c3c4f3479042 10 AnalogIn input1(p17);
phyllis 0:c3c4f3479042 11 DigitalIn charger0(p19);
phyllis 0:c3c4f3479042 12 DigitalIn charger1(p16);
phyllis 0:c3c4f3479042 13 DigitalOut ground0(p18);
phyllis 0:c3c4f3479042 14 DigitalOut ground1(p15);
phyllis 0:c3c4f3479042 15
phyllis 0:c3c4f3479042 16 char x;
phyllis 0:c3c4f3479042 17 char hstr[100];
phyllis 0:c3c4f3479042 18 int serial_flag = 0;
phyllis 0:c3c4f3479042 19 int str_flag = 0;
phyllis 0:c3c4f3479042 20 int host_flag = 0;
phyllis 0:c3c4f3479042 21 int index = 0;
phyllis 0:c3c4f3479042 22 int len;
phyllis 0:c3c4f3479042 23
phyllis 0:c3c4f3479042 24 int main()
phyllis 0:c3c4f3479042 25 {
phyllis 0:c3c4f3479042 26 char key;
phyllis 0:c3c4f3479042 27 char ustr[100];
phyllis 0:c3c4f3479042 28 int i, j;
phyllis 0:c3c4f3479042 29 int cmp_flag = 0;
phyllis 0:c3c4f3479042 30 pc.attach(&serial_interrupt, Serial::RxIrq);
phyllis 0:c3c4f3479042 31 while(1){
phyllis 0:c3c4f3479042 32 if (serial_flag == 1){
phyllis 0:c3c4f3479042 33 serial_flag = 0;
phyllis 0:c3c4f3479042 34 readstring(x);
phyllis 0:c3c4f3479042 35 }
phyllis 0:c3c4f3479042 36 i = 0;
phyllis 0:c3c4f3479042 37 cmp_flag = 0;
phyllis 0:c3c4f3479042 38 while (host_flag == 1){
phyllis 0:c3c4f3479042 39 key = readkey( );
phyllis 0:c3c4f3479042 40 if (key == 'e')
phyllis 0:c3c4f3479042 41 pc.printf("TOUCH ERROR");
phyllis 0:c3c4f3479042 42 else if (key == '1' || key == '0'){
phyllis 0:c3c4f3479042 43 ustr[i] = key;
phyllis 0:c3c4f3479042 44 printf("%c\n", ustr[i]);
phyllis 0:c3c4f3479042 45 if (i == len){
phyllis 0:c3c4f3479042 46 i = 0;
phyllis 0:c3c4f3479042 47 cmp_flag = 1;
phyllis 0:c3c4f3479042 48 }
phyllis 0:c3c4f3479042 49 else
phyllis 0:c3c4f3479042 50 i++;
phyllis 0:c3c4f3479042 51 if ( cmp_flag == 1 ){
phyllis 0:c3c4f3479042 52 for (j = 0; j <= len; j++){
phyllis 0:c3c4f3479042 53 if (hstr[j] != ustr[(i+j) % (len+1)])
phyllis 0:c3c4f3479042 54 break;
phyllis 0:c3c4f3479042 55 }
phyllis 0:c3c4f3479042 56 if (j == len+1)
phyllis 0:c3c4f3479042 57 pc.printf("MATCH!");
phyllis 0:c3c4f3479042 58 }
phyllis 0:c3c4f3479042 59 }
phyllis 0:c3c4f3479042 60 wait(0.005);
phyllis 0:c3c4f3479042 61 }
phyllis 0:c3c4f3479042 62 }
phyllis 0:c3c4f3479042 63 }
phyllis 0:c3c4f3479042 64
phyllis 0:c3c4f3479042 65 void readstring(char c)
phyllis 0:c3c4f3479042 66 {
phyllis 0:c3c4f3479042 67 int i;
phyllis 0:c3c4f3479042 68 if (x=='S'){
phyllis 0:c3c4f3479042 69 str_flag = 1;
phyllis 0:c3c4f3479042 70 index = 0;
phyllis 0:c3c4f3479042 71 }
phyllis 0:c3c4f3479042 72 else if (x=='E' && str_flag==1){
phyllis 0:c3c4f3479042 73 str_flag = 0;
phyllis 0:c3c4f3479042 74 host_flag = 1;
phyllis 0:c3c4f3479042 75 len = index - 1;
phyllis 0:c3c4f3479042 76 for (i = 0; i <= len; i++)
phyllis 0:c3c4f3479042 77 pc.printf("%c", hstr[i]);
phyllis 0:c3c4f3479042 78 }
phyllis 0:c3c4f3479042 79 else if (str_flag==1){
phyllis 0:c3c4f3479042 80 if (x=='1' || x=='0'){
phyllis 0:c3c4f3479042 81 hstr[index] = x;
phyllis 0:c3c4f3479042 82 index++;
phyllis 0:c3c4f3479042 83 }
phyllis 0:c3c4f3479042 84 else
phyllis 0:c3c4f3479042 85 pc.printf("HOST ERROR!\n");
phyllis 0:c3c4f3479042 86 }
phyllis 0:c3c4f3479042 87 return;
phyllis 0:c3c4f3479042 88 }
phyllis 0:c3c4f3479042 89
phyllis 0:c3c4f3479042 90 int touchSense( )
phyllis 0:c3c4f3479042 91 {
phyllis 0:c3c4f3479042 92 float sample0, sample1;
phyllis 0:c3c4f3479042 93 ground0=0;
phyllis 0:c3c4f3479042 94 ground1=0;
phyllis 0:c3c4f3479042 95 charger0.mode(PullUp);
phyllis 0:c3c4f3479042 96 charger1.mode(PullUp);
phyllis 0:c3c4f3479042 97 charger0.mode(PullNone);
phyllis 0:c3c4f3479042 98 charger1.mode(PullNone);
phyllis 0:c3c4f3479042 99 sample0 = input0.read();
phyllis 0:c3c4f3479042 100 sample1 = input1.read();
phyllis 0:c3c4f3479042 101 if (sample0 < 0.3 && sample1 < 0.3)
phyllis 0:c3c4f3479042 102 return 2;
phyllis 0:c3c4f3479042 103 else if (sample0 < 0.3)
phyllis 0:c3c4f3479042 104 return 0;
phyllis 0:c3c4f3479042 105 else if (sample1 < 0.3)
phyllis 0:c3c4f3479042 106 return 1;
phyllis 0:c3c4f3479042 107 else
phyllis 0:c3c4f3479042 108 return -1;
phyllis 0:c3c4f3479042 109 }
phyllis 0:c3c4f3479042 110
phyllis 0:c3c4f3479042 111 char readkey( )
phyllis 0:c3c4f3479042 112 {
phyllis 0:c3c4f3479042 113 int T = -1;
phyllis 0:c3c4f3479042 114 char key = 'n';
phyllis 0:c3c4f3479042 115
phyllis 0:c3c4f3479042 116 T = touchSense();
phyllis 0:c3c4f3479042 117 if (T==0) {
phyllis 0:c3c4f3479042 118 wait(0.005);
phyllis 0:c3c4f3479042 119 T = touchSense();
phyllis 0:c3c4f3479042 120 if (T==0){
phyllis 0:c3c4f3479042 121 while (1){
phyllis 0:c3c4f3479042 122 wait(0.005);
phyllis 0:c3c4f3479042 123 T = touchSense();
phyllis 0:c3c4f3479042 124 if (T==-1){
phyllis 0:c3c4f3479042 125 wait(0.005);
phyllis 0:c3c4f3479042 126 T = touchSense();
phyllis 0:c3c4f3479042 127 if (T==-1){
phyllis 0:c3c4f3479042 128 key = '0';
phyllis 0:c3c4f3479042 129 break;
phyllis 0:c3c4f3479042 130 }
phyllis 0:c3c4f3479042 131 }
phyllis 0:c3c4f3479042 132 else if (T==2)
phyllis 0:c3c4f3479042 133 break;
phyllis 0:c3c4f3479042 134 }
phyllis 0:c3c4f3479042 135 }
phyllis 0:c3c4f3479042 136 }
phyllis 0:c3c4f3479042 137 else if (T==1){
phyllis 0:c3c4f3479042 138 wait(0.005);
phyllis 0:c3c4f3479042 139 T = touchSense();
phyllis 0:c3c4f3479042 140 if (T==1){
phyllis 0:c3c4f3479042 141 while (1){
phyllis 0:c3c4f3479042 142 wait(0.005);
phyllis 0:c3c4f3479042 143 T = touchSense();
phyllis 0:c3c4f3479042 144 if (T==-1){
phyllis 0:c3c4f3479042 145 wait(0.005);
phyllis 0:c3c4f3479042 146 T = touchSense();
phyllis 0:c3c4f3479042 147 if (T==-1){
phyllis 0:c3c4f3479042 148 key = '1';
phyllis 0:c3c4f3479042 149 break;
phyllis 0:c3c4f3479042 150 }
phyllis 0:c3c4f3479042 151 }
phyllis 0:c3c4f3479042 152 else if (T==2)
phyllis 0:c3c4f3479042 153 break;
phyllis 0:c3c4f3479042 154 }
phyllis 0:c3c4f3479042 155 }
phyllis 0:c3c4f3479042 156 }
phyllis 0:c3c4f3479042 157 else if (T==-1)
phyllis 0:c3c4f3479042 158 key = 'n';
phyllis 0:c3c4f3479042 159 if (T==2){
phyllis 0:c3c4f3479042 160 wait(0.005);
phyllis 0:c3c4f3479042 161 T = touchSense();
phyllis 0:c3c4f3479042 162 if (T==2){
phyllis 0:c3c4f3479042 163 while (1){
phyllis 0:c3c4f3479042 164 wait(0.005);
phyllis 0:c3c4f3479042 165 T = touchSense();
phyllis 0:c3c4f3479042 166 if (T==-1){
phyllis 0:c3c4f3479042 167 wait(0.005);
phyllis 0:c3c4f3479042 168 T = touchSense();
phyllis 0:c3c4f3479042 169 if (T==-1){
phyllis 0:c3c4f3479042 170 key = 'e';
phyllis 0:c3c4f3479042 171 break;
phyllis 0:c3c4f3479042 172 }
phyllis 0:c3c4f3479042 173 }
phyllis 0:c3c4f3479042 174 }
phyllis 0:c3c4f3479042 175 }
phyllis 0:c3c4f3479042 176 }
phyllis 0:c3c4f3479042 177 return key;
phyllis 0:c3c4f3479042 178 }
phyllis 0:c3c4f3479042 179
phyllis 0:c3c4f3479042 180 void serial_interrupt( )
phyllis 0:c3c4f3479042 181 {
phyllis 0:c3c4f3479042 182 if (pc.readable( )){
phyllis 0:c3c4f3479042 183 x = pc.getc( );
phyllis 0:c3c4f3479042 184 serial_flag = 1;
phyllis 0:c3c4f3479042 185 host_flag = 0;
phyllis 0:c3c4f3479042 186 }
phyllis 0:c3c4f3479042 187 return;
phyllis 0:c3c4f3479042 188 }