Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:09db827cab9c, 2010-12-01 (annotated)
- Committer:
- henryicla
- Date:
- Wed Dec 01 02:00:40 2010 +0000
- Revision:
- 0:09db827cab9c
Who changed what in which revision?
| User | Revision | Line number | New 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 () */ |