Jiwen Cai / Mbed 2 deprecated HW2-3
Committer:
goodcjw
Date:
Tue Nov 30 23:52:57 2010 +0000
Revision:
0:ca4c2177a6b5

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
goodcjw 0:ca4c2177a6b5 1 #include "mbed.h"
goodcjw 0:ca4c2177a6b5 2 #include "pt.h"
goodcjw 0:ca4c2177a6b5 3
goodcjw 0:ca4c2177a6b5 4 #define NBUFF 10
goodcjw 0:ca4c2177a6b5 5
goodcjw 0:ca4c2177a6b5 6 typedef enum {
goodcjw 0:ca4c2177a6b5 7 e_ValidInput,
goodcjw 0:ca4c2177a6b5 8 e_Init,
goodcjw 0:ca4c2177a6b5 9 } Event_t;
goodcjw 0:ca4c2177a6b5 10
goodcjw 0:ca4c2177a6b5 11 DigitalOut myled_1(LED1);
goodcjw 0:ca4c2177a6b5 12 DigitalOut myled_2(LED2);
goodcjw 0:ca4c2177a6b5 13 AnalogIn input_1(p17);
goodcjw 0:ca4c2177a6b5 14 AnalogIn input_2(p20);
goodcjw 0:ca4c2177a6b5 15 DigitalIn charger_1(p16);
goodcjw 0:ca4c2177a6b5 16 DigitalIn charger_2(p19);
goodcjw 0:ca4c2177a6b5 17 DigitalOut ground_1(p15);
goodcjw 0:ca4c2177a6b5 18 DigitalOut ground_2(p18);
goodcjw 0:ca4c2177a6b5 19 Serial pc(USBTX, USBRX); // tx, rx
goodcjw 0:ca4c2177a6b5 20
goodcjw 0:ca4c2177a6b5 21 int buff_1, buff_2;
goodcjw 0:ca4c2177a6b5 22 int last_1, last_2;
goodcjw 0:ca4c2177a6b5 23 char trigger[128];
goodcjw 0:ca4c2177a6b5 24 int tr_len, tr_pos;
goodcjw 0:ca4c2177a6b5 25 char key;
goodcjw 0:ca4c2177a6b5 26
goodcjw 0:ca4c2177a6b5 27 int touchSense_1(void);
goodcjw 0:ca4c2177a6b5 28 int touchSense_2(void);
goodcjw 0:ca4c2177a6b5 29 int keyPressed();
goodcjw 0:ca4c2177a6b5 30 int buttonTouched();
goodcjw 0:ca4c2177a6b5 31 char readTouchInput();
goodcjw 0:ca4c2177a6b5 32
goodcjw 0:ca4c2177a6b5 33
goodcjw 0:ca4c2177a6b5 34 // int flag;
goodcjw 0:ca4c2177a6b5 35 Event_t ev;
goodcjw 0:ca4c2177a6b5 36
goodcjw 0:ca4c2177a6b5 37 static
goodcjw 0:ca4c2177a6b5 38 PT_THREAD(pt_serial(struct pt *pt)) {
goodcjw 0:ca4c2177a6b5 39 PT_BEGIN(pt);
goodcjw 0:ca4c2177a6b5 40 while (1) {
goodcjw 0:ca4c2177a6b5 41 PT_YIELD_UNTIL(pt, ev == e_Init);
goodcjw 0:ca4c2177a6b5 42 trigger[0] = '\0';
goodcjw 0:ca4c2177a6b5 43 tr_len = 0;
goodcjw 0:ca4c2177a6b5 44 pc.printf("Please input the trigger string in the format of Sbbb...bbbE\n\r");
goodcjw 0:ca4c2177a6b5 45 PT_YIELD_UNTIL(pt, keyPressed());
goodcjw 0:ca4c2177a6b5 46 if (key != 'S') {
goodcjw 0:ca4c2177a6b5 47 pc.printf("HOST ERROR\n\r");
goodcjw 0:ca4c2177a6b5 48 PT_EXIT(pt);
goodcjw 0:ca4c2177a6b5 49 }
goodcjw 0:ca4c2177a6b5 50 while (1) {
goodcjw 0:ca4c2177a6b5 51 PT_YIELD_UNTIL(pt, keyPressed());
goodcjw 0:ca4c2177a6b5 52 if (key == 'E') {
goodcjw 0:ca4c2177a6b5 53 pc.printf("\n\r");
goodcjw 0:ca4c2177a6b5 54 if (tr_len == 0) {
goodcjw 0:ca4c2177a6b5 55 pc.printf("HOST ERROR\n\r");
goodcjw 0:ca4c2177a6b5 56 PT_EXIT(pt);
goodcjw 0:ca4c2177a6b5 57 } else {
goodcjw 0:ca4c2177a6b5 58 trigger[tr_len] = '\0';
goodcjw 0:ca4c2177a6b5 59 break;
goodcjw 0:ca4c2177a6b5 60 }
goodcjw 0:ca4c2177a6b5 61 } else if (key == '0' || key == '1') {
goodcjw 0:ca4c2177a6b5 62 trigger[tr_len++] = key;
goodcjw 0:ca4c2177a6b5 63 pc.putc(key);
goodcjw 0:ca4c2177a6b5 64 } else if (key == ' ') {
goodcjw 0:ca4c2177a6b5 65 pc.putc(key);
goodcjw 0:ca4c2177a6b5 66 } else {
goodcjw 0:ca4c2177a6b5 67 pc.printf("\n\rHOST ERROR\n\r");
goodcjw 0:ca4c2177a6b5 68 PT_EXIT(pt);
goodcjw 0:ca4c2177a6b5 69 }
goodcjw 0:ca4c2177a6b5 70 }
goodcjw 0:ca4c2177a6b5 71 // Now we can process to Touch Input
goodcjw 0:ca4c2177a6b5 72 ev = e_ValidInput;
goodcjw 0:ca4c2177a6b5 73 }
goodcjw 0:ca4c2177a6b5 74 PT_END(pt);
goodcjw 0:ca4c2177a6b5 75 }
goodcjw 0:ca4c2177a6b5 76
goodcjw 0:ca4c2177a6b5 77 static
goodcjw 0:ca4c2177a6b5 78 PT_THREAD(pt_touch(struct pt *pt)) {
goodcjw 0:ca4c2177a6b5 79 PT_BEGIN(pt);
goodcjw 0:ca4c2177a6b5 80 while (1) {
goodcjw 0:ca4c2177a6b5 81 PT_YIELD_UNTIL(pt, ev == e_ValidInput);
goodcjw 0:ca4c2177a6b5 82 pc.printf("The trigger string is %s\n\r", trigger);
goodcjw 0:ca4c2177a6b5 83 pc.printf("Please start to touch the button\n\r");
goodcjw 0:ca4c2177a6b5 84 tr_pos = 0;
goodcjw 0:ca4c2177a6b5 85 while(tr_pos < tr_len) {
goodcjw 0:ca4c2177a6b5 86 PT_YIELD_UNTIL(pt, buttonTouched());
goodcjw 0:ca4c2177a6b5 87 pc.putc(key);
goodcjw 0:ca4c2177a6b5 88 if (key != trigger[tr_pos++]) {
goodcjw 0:ca4c2177a6b5 89 pc.printf("\n\rTOUCH ERROR\n\r");
goodcjw 0:ca4c2177a6b5 90 ev = e_Init;
goodcjw 0:ca4c2177a6b5 91 PT_EXIT(pt);
goodcjw 0:ca4c2177a6b5 92 }
goodcjw 0:ca4c2177a6b5 93 }
goodcjw 0:ca4c2177a6b5 94 pc.printf("\n\r");
goodcjw 0:ca4c2177a6b5 95 pc.printf("MATCH\n\r");
goodcjw 0:ca4c2177a6b5 96 ev = e_Init;
goodcjw 0:ca4c2177a6b5 97 PT_EXIT(pt);
goodcjw 0:ca4c2177a6b5 98 }
goodcjw 0:ca4c2177a6b5 99 PT_END(pt);
goodcjw 0:ca4c2177a6b5 100 }
goodcjw 0:ca4c2177a6b5 101
goodcjw 0:ca4c2177a6b5 102 static struct pt pt1, pt2;
goodcjw 0:ca4c2177a6b5 103 int main() {
goodcjw 0:ca4c2177a6b5 104 PT_INIT(&pt1);
goodcjw 0:ca4c2177a6b5 105 PT_INIT(&pt2);
goodcjw 0:ca4c2177a6b5 106 // flag = S_SERIAL;
goodcjw 0:ca4c2177a6b5 107 ev = e_Init;
goodcjw 0:ca4c2177a6b5 108 while (1) {
goodcjw 0:ca4c2177a6b5 109 pt_serial(&pt1);
goodcjw 0:ca4c2177a6b5 110 pt_touch(&pt2);
goodcjw 0:ca4c2177a6b5 111 }
goodcjw 0:ca4c2177a6b5 112 }
goodcjw 0:ca4c2177a6b5 113
goodcjw 0:ca4c2177a6b5 114 int keyPressed() {
goodcjw 0:ca4c2177a6b5 115 key = pc.getc();
goodcjw 0:ca4c2177a6b5 116 return 1;
goodcjw 0:ca4c2177a6b5 117 }
goodcjw 0:ca4c2177a6b5 118
goodcjw 0:ca4c2177a6b5 119 int buttonTouched() {
goodcjw 0:ca4c2177a6b5 120 key = readTouchInput();
goodcjw 0:ca4c2177a6b5 121 return 1;
goodcjw 0:ca4c2177a6b5 122 }
goodcjw 0:ca4c2177a6b5 123
goodcjw 0:ca4c2177a6b5 124 int touchSense_1(void) {
goodcjw 0:ca4c2177a6b5 125 float sample;
goodcjw 0:ca4c2177a6b5 126 ground_1 = 0;
goodcjw 0:ca4c2177a6b5 127 charger_1.mode(PullUp);
goodcjw 0:ca4c2177a6b5 128 charger_1.mode(PullNone);
goodcjw 0:ca4c2177a6b5 129 sample=input_1.read();
goodcjw 0:ca4c2177a6b5 130 if (sample < 0.3) {
goodcjw 0:ca4c2177a6b5 131 return 1;
goodcjw 0:ca4c2177a6b5 132 } else {
goodcjw 0:ca4c2177a6b5 133 return 0;
goodcjw 0:ca4c2177a6b5 134 }
goodcjw 0:ca4c2177a6b5 135 }
goodcjw 0:ca4c2177a6b5 136
goodcjw 0:ca4c2177a6b5 137 int touchSense_2(void) {
goodcjw 0:ca4c2177a6b5 138 float sample;
goodcjw 0:ca4c2177a6b5 139 ground_2 = 0;
goodcjw 0:ca4c2177a6b5 140 charger_2.mode(PullUp);
goodcjw 0:ca4c2177a6b5 141 charger_2.mode(PullNone);
goodcjw 0:ca4c2177a6b5 142 sample=input_2.read();
goodcjw 0:ca4c2177a6b5 143 if (sample < 0.3) {
goodcjw 0:ca4c2177a6b5 144 return 1;
goodcjw 0:ca4c2177a6b5 145 } else {
goodcjw 0:ca4c2177a6b5 146 return 0;
goodcjw 0:ca4c2177a6b5 147 }
goodcjw 0:ca4c2177a6b5 148 }
goodcjw 0:ca4c2177a6b5 149
goodcjw 0:ca4c2177a6b5 150 char readTouchInput() {
goodcjw 0:ca4c2177a6b5 151 while (1) {
goodcjw 0:ca4c2177a6b5 152 if (touchSense_1()) {
goodcjw 0:ca4c2177a6b5 153 myled_1 = 1;
goodcjw 0:ca4c2177a6b5 154 if (!last_1) {
goodcjw 0:ca4c2177a6b5 155 last_1 = 1;
goodcjw 0:ca4c2177a6b5 156 buff_1 = NBUFF;
goodcjw 0:ca4c2177a6b5 157 }
goodcjw 0:ca4c2177a6b5 158 } else {
goodcjw 0:ca4c2177a6b5 159 if (last_1) {
goodcjw 0:ca4c2177a6b5 160 last_1 = 0;
goodcjw 0:ca4c2177a6b5 161 } else {
goodcjw 0:ca4c2177a6b5 162 if (buff_1 == 0) {
goodcjw 0:ca4c2177a6b5 163 if (myled_1) {
goodcjw 0:ca4c2177a6b5 164 myled_1 = 0;
goodcjw 0:ca4c2177a6b5 165 return '0';
goodcjw 0:ca4c2177a6b5 166 }
goodcjw 0:ca4c2177a6b5 167 } else {
goodcjw 0:ca4c2177a6b5 168 buff_1--;
goodcjw 0:ca4c2177a6b5 169 }
goodcjw 0:ca4c2177a6b5 170 }
goodcjw 0:ca4c2177a6b5 171 }
goodcjw 0:ca4c2177a6b5 172 if (touchSense_2()) {
goodcjw 0:ca4c2177a6b5 173 myled_2 = 1;
goodcjw 0:ca4c2177a6b5 174 if (!last_2) {
goodcjw 0:ca4c2177a6b5 175 last_2 = 1;
goodcjw 0:ca4c2177a6b5 176 buff_2 = NBUFF;
goodcjw 0:ca4c2177a6b5 177 }
goodcjw 0:ca4c2177a6b5 178 } else {
goodcjw 0:ca4c2177a6b5 179 if (last_2) {
goodcjw 0:ca4c2177a6b5 180 last_2 = 0;
goodcjw 0:ca4c2177a6b5 181 } else {
goodcjw 0:ca4c2177a6b5 182 if (buff_2 == 0) {
goodcjw 0:ca4c2177a6b5 183 if (myled_2) {
goodcjw 0:ca4c2177a6b5 184 myled_2 = 0;
goodcjw 0:ca4c2177a6b5 185 return '1';
goodcjw 0:ca4c2177a6b5 186 }
goodcjw 0:ca4c2177a6b5 187 } else {
goodcjw 0:ca4c2177a6b5 188 buff_2--;
goodcjw 0:ca4c2177a6b5 189 }
goodcjw 0:ca4c2177a6b5 190 }
goodcjw 0:ca4c2177a6b5 191 }
goodcjw 0:ca4c2177a6b5 192 wait(0.005);
goodcjw 0:ca4c2177a6b5 193 }
goodcjw 0:ca4c2177a6b5 194 }