Henry Chen / Mbed 2 deprecated hw2_pt

Dependencies:   mbed

Committer:
henryicla
Date:
Wed Dec 01 02:00:40 2010 +0000
Revision:
0:09db827cab9c

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
henryicla 0:09db827cab9c 1 #include "mbed.h"
henryicla 0:09db827cab9c 2 #include "pt.h"
henryicla 0:09db827cab9c 3 #include <vector>
henryicla 0:09db827cab9c 4
henryicla 0:09db827cab9c 5 #define ADC_THRESH_HI 0.2
henryicla 0:09db827cab9c 6 #define ADC_THRESH_LO 0.1
henryicla 0:09db827cab9c 7 #define VDD 3.3
henryicla 0:09db827cab9c 8
henryicla 0:09db827cab9c 9 Serial pc(USBTX, USBRX); // tx, rx
henryicla 0:09db827cab9c 10
henryicla 0:09db827cab9c 11
henryicla 0:09db827cab9c 12 DigitalOut T0_gnd(p15); // for ground
henryicla 0:09db827cab9c 13 DigitalIn T0_chg(p16); // charge pull-up
henryicla 0:09db827cab9c 14 AnalogIn T0(p17);
henryicla 0:09db827cab9c 15
henryicla 0:09db827cab9c 16 DigitalOut T1_gnd(p18); // for ground
henryicla 0:09db827cab9c 17 DigitalIn T1_chg(p19); // charge pull-up
henryicla 0:09db827cab9c 18 AnalogIn T1(p20);
henryicla 0:09db827cab9c 19
henryicla 0:09db827cab9c 20 static vector<int> triggerString, newString;
henryicla 0:09db827cab9c 21
henryicla 0:09db827cab9c 22 static PT_THREAD(setTrigger_thread(struct pt *pt)) {
henryicla 0:09db827cab9c 23
henryicla 0:09db827cab9c 24 static char readChar;
henryicla 0:09db827cab9c 25
henryicla 0:09db827cab9c 26 PT_BEGIN(pt);
henryicla 0:09db827cab9c 27
henryicla 0:09db827cab9c 28 while (1) {
henryicla 0:09db827cab9c 29 PT_WAIT_UNTIL(pt, (pc.readable() == 1) );
henryicla 0:09db827cab9c 30
henryicla 0:09db827cab9c 31 readChar = pc.getc();
henryicla 0:09db827cab9c 32
henryicla 0:09db827cab9c 33 if ( (readChar == 'S') || (readChar == 's') ) {
henryicla 0:09db827cab9c 34 newString.clear();
henryicla 0:09db827cab9c 35 }
henryicla 0:09db827cab9c 36 else if( readChar == '0' ) {
henryicla 0:09db827cab9c 37 newString.push_back(0);
henryicla 0:09db827cab9c 38 }
henryicla 0:09db827cab9c 39 else if ( readChar == '1') {
henryicla 0:09db827cab9c 40 newString.push_back(1);
henryicla 0:09db827cab9c 41 }
henryicla 0:09db827cab9c 42 else if( (readChar == 'e') || (readChar == 'E') )
henryicla 0:09db827cab9c 43 triggerString.swap(newString);
henryicla 0:09db827cab9c 44 }
henryicla 0:09db827cab9c 45 }
henryicla 0:09db827cab9c 46
henryicla 0:09db827cab9c 47 PT_END(pt);
henryicla 0:09db827cab9c 48
henryicla 0:09db827cab9c 49 } /* static PT_THREAD(setTrigger_thread()) */
henryicla 0:09db827cab9c 50
henryicla 0:09db827cab9c 51 static struct pt setTrigger_pt;
henryicla 0:09db827cab9c 52
henryicla 0:09db827cab9c 53 int main() {
henryicla 0:09db827cab9c 54
henryicla 0:09db827cab9c 55 int userInput;
henryicla 0:09db827cab9c 56
henryicla 0:09db827cab9c 57 int n;
henryicla 0:09db827cab9c 58
henryicla 0:09db827cab9c 59 float T0_voltage, T1_voltage;
henryicla 0:09db827cab9c 60 float T0_bufVoltage, T1_bufVoltage;
henryicla 0:09db827cab9c 61
henryicla 0:09db827cab9c 62 int T0_touched, T1_touched;
henryicla 0:09db827cab9c 63
henryicla 0:09db827cab9c 64 PT_INIT(&setTrigger_pt);
henryicla 0:09db827cab9c 65
henryicla 0:09db827cab9c 66
henryicla 0:09db827cab9c 67 T0_gnd = 0;
henryicla 0:09db827cab9c 68 T1_gnd = 0;
henryicla 0:09db827cab9c 69
henryicla 0:09db827cab9c 70 T0_voltage = VDD;
henryicla 0:09db827cab9c 71 T1_voltage = VDD;
henryicla 0:09db827cab9c 72
henryicla 0:09db827cab9c 73 T0_touched = 0;
henryicla 0:09db827cab9c 74 T1_touched = 0;
henryicla 0:09db827cab9c 75
henryicla 0:09db827cab9c 76 userInput = -1;
henryicla 0:09db827cab9c 77
henryicla 0:09db827cab9c 78 n = 0;
henryicla 0:09db827cab9c 79 triggerLength = 0;
henryicla 0:09db827cab9c 80
henryicla 0:09db827cab9c 81 T0_chg.mode(PullUp);
henryicla 0:09db827cab9c 82 T1_chg.mode(PullUp);
henryicla 0:09db827cab9c 83
henryicla 0:09db827cab9c 84 T0_chg.mode(PullNone);
henryicla 0:09db827cab9c 85 T1_chg.mode(PullNone);
henryicla 0:09db827cab9c 86
henryicla 0:09db827cab9c 87 while (1) {
henryicla 0:09db827cab9c 88
henryicla 0:09db827cab9c 89 // pc.printf("Enter a binary sequence ('S' to start, 'E' to end): ");
henryicla 0:09db827cab9c 90
henryicla 0:09db827cab9c 91 PT_SCHEDULE(setTrigger_thread(&setTrigger_pt))
henryicla 0:09db827cab9c 92
henryicla 0:09db827cab9c 93 T0_chg.mode(PullUp);
henryicla 0:09db827cab9c 94 T1_chg.mode(PullUp);
henryicla 0:09db827cab9c 95
henryicla 0:09db827cab9c 96 T0_chg.mode(PullNone);
henryicla 0:09db827cab9c 97 T1_chg.mode(PullNone);
henryicla 0:09db827cab9c 98
henryicla 0:09db827cab9c 99 T0_bufVoltage = 0.0;
henryicla 0:09db827cab9c 100 T1_bufVoltage = 0.0;
henryicla 0:09db827cab9c 101
henryicla 0:09db827cab9c 102 T0_touched = 0;
henryicla 0:09db827cab9c 103 T1_touched = 0;
henryicla 0:09db827cab9c 104
henryicla 0:09db827cab9c 105 for (int i = 0; i < 5; i++) {
henryicla 0:09db827cab9c 106 T0_voltage = T0.read();
henryicla 0:09db827cab9c 107 T1_voltage = T1.read();
henryicla 0:09db827cab9c 108
henryicla 0:09db827cab9c 109 // pc.printf("%d: 0=%f, 1=%f\n", i, T0_voltage, T1_voltage);
henryicla 0:09db827cab9c 110
henryicla 0:09db827cab9c 111 T0_bufVoltage += T0_voltage;
henryicla 0:09db827cab9c 112 T1_bufVoltage += T1_voltage;
henryicla 0:09db827cab9c 113 wait_ms(1);
henryicla 0:09db827cab9c 114 }
henryicla 0:09db827cab9c 115
henryicla 0:09db827cab9c 116 // pc.printf("0=%f, 1=%f\n", T0_bufVoltage, T1_bufVoltage);
henryicla 0:09db827cab9c 117
henryicla 0:09db827cab9c 118 if (T0_bufVoltage < 1.0) {
henryicla 0:09db827cab9c 119 T0_touched = 1;
henryicla 0:09db827cab9c 120 }
henryicla 0:09db827cab9c 121
henryicla 0:09db827cab9c 122 if (T1_bufVoltage < 1.0) {
henryicla 0:09db827cab9c 123 T1_touched = 1;
henryicla 0:09db827cab9c 124 }
henryicla 0:09db827cab9c 125
henryicla 0:09db827cab9c 126 if ( (T0_touched == 1) && (T1_touched == 1) ) {
henryicla 0:09db827cab9c 127 pc.printf("TOUCH ERROR\n");
henryicla 0:09db827cab9c 128 n = 0;
henryicla 0:09db827cab9c 129
henryicla 0:09db827cab9c 130 continue;
henryicla 0:09db827cab9c 131 }
henryicla 0:09db827cab9c 132 else if (T0_touched == 1) {
henryicla 0:09db827cab9c 133 pc.printf("T0 touched\n");
henryicla 0:09db827cab9c 134 userInput = 0;
henryicla 0:09db827cab9c 135 }
henryicla 0:09db827cab9c 136 else if (T1_touched == 1) {
henryicla 0:09db827cab9c 137 pc.printf("T1 touched\n");
henryicla 0:09db827cab9c 138 userInput = 1;
henryicla 0:09db827cab9c 139 }
henryicla 0:09db827cab9c 140
henryicla 0:09db827cab9c 141 if ( (T1_touched == 1) || (T0_touched == 1) ) {
henryicla 0:09db827cab9c 142 if ( (triggerLength != 0) && (userInput == triggerString[n]) ) {
henryicla 0:09db827cab9c 143 n = n + 1;
henryicla 0:09db827cab9c 144
henryicla 0:09db827cab9c 145 if (n == triggerLength) {
henryicla 0:09db827cab9c 146 pc.printf("MATCH\n");
henryicla 0:09db827cab9c 147 n = 0;
henryicla 0:09db827cab9c 148 }
henryicla 0:09db827cab9c 149 } else {
henryicla 0:09db827cab9c 150 n = 0;
henryicla 0:09db827cab9c 151 }
henryicla 0:09db827cab9c 152
henryicla 0:09db827cab9c 153 do {
henryicla 0:09db827cab9c 154 T0_voltage = VDD * T0.read();
henryicla 0:09db827cab9c 155 T1_voltage = VDD * T1.read();
henryicla 0:09db827cab9c 156 // pc.printf("%f, %f\n", T0_voltage, T1_voltage);
henryicla 0:09db827cab9c 157 wait_ms(5);
henryicla 0:09db827cab9c 158 } while ( (T0_voltage < ADC_THRESH_HI) || (T1_voltage < ADC_THRESH_HI) );
henryicla 0:09db827cab9c 159 }
henryicla 0:09db827cab9c 160
henryicla 0:09db827cab9c 161 } /* while (1) */
henryicla 0:09db827cab9c 162
henryicla 0:09db827cab9c 163 } /* int main () */