2. An implementation of the system as a single program loop

Dependencies:   mbed

Committer:
manujose
Date:
Tue Nov 30 22:00:27 2010 +0000
Revision:
0:d0f22e772042
The final revision

Who changed what in which revision?

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