3. An implementation of the system as a foreground0background

Committer:
manujose
Date:
Tue Nov 30 22:01:32 2010 +0000
Revision:
0:a484f149592d
back ground and foreground the final version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
manujose 0:a484f149592d 1 #include "mbed.h"
manujose 0:a484f149592d 2
manujose 0:a484f149592d 3 #define ERROR -1
manujose 0:a484f149592d 4 int touchSense1(void);
manujose 0:a484f149592d 5 int touchSense2(void);
manujose 0:a484f149592d 6 int getTouch(void);
manujose 0:a484f149592d 7 void hostError(void);
manujose 0:a484f149592d 8 void touchError(void);
manujose 0:a484f149592d 9 void runFunction(void);
manujose 0:a484f149592d 10
manujose 0:a484f149592d 11 DigitalOut myled1(LED1);
manujose 0:a484f149592d 12 DigitalOut myled2(LED3);
manujose 0:a484f149592d 13
manujose 0:a484f149592d 14 AnalogIn input1(p20);
manujose 0:a484f149592d 15 AnalogIn input2(p15);
manujose 0:a484f149592d 16
manujose 0:a484f149592d 17 DigitalIn charger1(p19);
manujose 0:a484f149592d 18 DigitalIn charger2(p16);
manujose 0:a484f149592d 19
manujose 0:a484f149592d 20 DigitalOut ground1(p18);
manujose 0:a484f149592d 21 DigitalOut ground2(p17);
manujose 0:a484f149592d 22 Serial pc(USBTX, USBRX); // tx, rx
manujose 0:a484f149592d 23
manujose 0:a484f149592d 24 int gInd = 0;
manujose 0:a484f149592d 25 int main() {
manujose 0:a484f149592d 26 pc.attach(runFunction);
manujose 0:a484f149592d 27 while(1) {
manujose 0:a484f149592d 28 if(gInd == 1)
manujose 0:a484f149592d 29 {
manujose 0:a484f149592d 30 pc.printf(" Reached back the main fun\n");
manujose 0:a484f149592d 31 gInd =0;
manujose 0:a484f149592d 32 }
manujose 0:a484f149592d 33 wait(0.2);
manujose 0:a484f149592d 34 }
manujose 0:a484f149592d 35 }
manujose 0:a484f149592d 36
manujose 0:a484f149592d 37 void runFunction() {
manujose 0:a484f149592d 38 char A[1024],c='k';
manujose 0:a484f149592d 39 int len, i, t_bit, h_bit;
manujose 0:a484f149592d 40 gInd = 1;
manujose 0:a484f149592d 41 int err_set ;
manujose 0:a484f149592d 42 pc.printf(" Entering the reading loop\n");
manujose 0:a484f149592d 43 // if (pc.readable()) {
manujose 0:a484f149592d 44 i = 0;
manujose 0:a484f149592d 45 err_set = 0;
manujose 0:a484f149592d 46 while(c!='S' && pc.readable())
manujose 0:a484f149592d 47 c = pc.getc();
manujose 0:a484f149592d 48
manujose 0:a484f149592d 49 while( (c != 'E') && pc.readable())
manujose 0:a484f149592d 50 {
manujose 0:a484f149592d 51 if(c != ' ')
manujose 0:a484f149592d 52 {
manujose 0:a484f149592d 53 //if((c == '0') || (c=='1'))
manujose 0:a484f149592d 54 A[i++] = c;
manujose 0:a484f149592d 55 if((i>1) && (c!='0') &&(c!='1'))
manujose 0:a484f149592d 56 {
manujose 0:a484f149592d 57 err_set = 1;
manujose 0:a484f149592d 58 hostError();
manujose 0:a484f149592d 59 while(pc.readable()) //buffer out rest and return
manujose 0:a484f149592d 60 c=pc.getc();
manujose 0:a484f149592d 61 return;
manujose 0:a484f149592d 62 }
manujose 0:a484f149592d 63
manujose 0:a484f149592d 64 }
manujose 0:a484f149592d 65 // pc.printf("READING %c \n",c);
manujose 0:a484f149592d 66 c = pc.getc();
manujose 0:a484f149592d 67 }
manujose 0:a484f149592d 68 A[i] = c;
manujose 0:a484f149592d 69 A[i+1]='\0';
manujose 0:a484f149592d 70 while(pc.readable()) //buffer out rest.
manujose 0:a484f149592d 71 c=pc.getc();
manujose 0:a484f149592d 72
manujose 0:a484f149592d 73
manujose 0:a484f149592d 74 //pc.printf("DATA RECV : %s\n",A);
manujose 0:a484f149592d 75 len = strlen(A)-1; //to make it right offset
manujose 0:a484f149592d 76 if ((A[0]!='S') || (A[len] != 'E')) {
manujose 0:a484f149592d 77 hostError();
manujose 0:a484f149592d 78 return;
manujose 0:a484f149592d 79 }
manujose 0:a484f149592d 80 i = 1;
manujose 0:a484f149592d 81 while (i<len) {
manujose 0:a484f149592d 82 t_bit = getTouch();
manujose 0:a484f149592d 83 //pc.printf("\n MY TOKEN IS %c and touch is %d\n",A[i],t_bit);
manujose 0:a484f149592d 84 if (A[i] == '0')
manujose 0:a484f149592d 85 h_bit = 0;
manujose 0:a484f149592d 86 else if (A[i] == '1')
manujose 0:a484f149592d 87 h_bit = 1;
manujose 0:a484f149592d 88
manujose 0:a484f149592d 89 if (t_bit != h_bit) {
manujose 0:a484f149592d 90 touchError();
manujose 0:a484f149592d 91 return;
manujose 0:a484f149592d 92 }
manujose 0:a484f149592d 93 i++;
manujose 0:a484f149592d 94 }
manujose 0:a484f149592d 95 pc.printf("MATCH\n");
manujose 0:a484f149592d 96 //}
manujose 0:a484f149592d 97 return;
manujose 0:a484f149592d 98 }
manujose 0:a484f149592d 99
manujose 0:a484f149592d 100 int getTouch(void) {
manujose 0:a484f149592d 101 int sens;
manujose 0:a484f149592d 102 while (1) {
manujose 0:a484f149592d 103
manujose 0:a484f149592d 104 sens = 0;
manujose 0:a484f149592d 105 if (touchSense1()) {
manujose 0:a484f149592d 106 wait_ms(5);
manujose 0:a484f149592d 107 while(touchSense1())
manujose 0:a484f149592d 108 {
manujose 0:a484f149592d 109 // pc.printf("In touchsense1\n");
manujose 0:a484f149592d 110 sens = 1;
manujose 0:a484f149592d 111 wait_ms(100);
manujose 0:a484f149592d 112 }
manujose 0:a484f149592d 113 if(sens)
manujose 0:a484f149592d 114 return 0;
manujose 0:a484f149592d 115 }
manujose 0:a484f149592d 116
manujose 0:a484f149592d 117 if (touchSense2()) {
manujose 0:a484f149592d 118 wait_ms(5);
manujose 0:a484f149592d 119 while(touchSense2())
manujose 0:a484f149592d 120 {
manujose 0:a484f149592d 121 // pc.printf("In touchsense2\n");
manujose 0:a484f149592d 122 sens = 1;
manujose 0:a484f149592d 123 wait_ms(100);
manujose 0:a484f149592d 124 }
manujose 0:a484f149592d 125 if(sens)
manujose 0:a484f149592d 126 return 1;
manujose 0:a484f149592d 127 }
manujose 0:a484f149592d 128 }
manujose 0:a484f149592d 129 }
manujose 0:a484f149592d 130
manujose 0:a484f149592d 131 int touchSense1(void) {
manujose 0:a484f149592d 132 float sample;
manujose 0:a484f149592d 133 ground1 = 0;
manujose 0:a484f149592d 134 charger1.mode(PullUp);
manujose 0:a484f149592d 135 charger1.mode(PullNone);
manujose 0:a484f149592d 136 sample=input1.read();
manujose 0:a484f149592d 137 if (sample < 0.3) {
manujose 0:a484f149592d 138 return 1;
manujose 0:a484f149592d 139 } else {
manujose 0:a484f149592d 140 return 0;
manujose 0:a484f149592d 141 }
manujose 0:a484f149592d 142 }
manujose 0:a484f149592d 143
manujose 0:a484f149592d 144 int touchSense2(void) {
manujose 0:a484f149592d 145 float sample;
manujose 0:a484f149592d 146 ground2 = 0;
manujose 0:a484f149592d 147 charger2.mode(PullUp);
manujose 0:a484f149592d 148 charger2.mode(PullNone);
manujose 0:a484f149592d 149 sample=input2.read();
manujose 0:a484f149592d 150 if (sample < 0.3) {
manujose 0:a484f149592d 151 return 1;
manujose 0:a484f149592d 152 } else {
manujose 0:a484f149592d 153 return 0;
manujose 0:a484f149592d 154 }
manujose 0:a484f149592d 155 }
manujose 0:a484f149592d 156
manujose 0:a484f149592d 157 void hostError() {
manujose 0:a484f149592d 158 pc.printf("HOST ERROR");
manujose 0:a484f149592d 159 }
manujose 0:a484f149592d 160 void touchError() {
manujose 0:a484f149592d 161 pc.printf("TOUCH ERROR");
manujose 0:a484f149592d 162 }