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
- Committer:
- goodcjw
- Date:
- 2010-11-30
- Revision:
- 0:ca4c2177a6b5
File content as of revision 0:ca4c2177a6b5:
#include "mbed.h"
#include "pt.h"
#define NBUFF 10
typedef enum {
e_ValidInput,
e_Init,
} Event_t;
DigitalOut myled_1(LED1);
DigitalOut myled_2(LED2);
AnalogIn input_1(p17);
AnalogIn input_2(p20);
DigitalIn charger_1(p16);
DigitalIn charger_2(p19);
DigitalOut ground_1(p15);
DigitalOut ground_2(p18);
Serial pc(USBTX, USBRX); // tx, rx
int buff_1, buff_2;
int last_1, last_2;
char trigger[128];
int tr_len, tr_pos;
char key;
int touchSense_1(void);
int touchSense_2(void);
int keyPressed();
int buttonTouched();
char readTouchInput();
// int flag;
Event_t ev;
static
PT_THREAD(pt_serial(struct pt *pt)) {
PT_BEGIN(pt);
while (1) {
PT_YIELD_UNTIL(pt, ev == e_Init);
trigger[0] = '\0';
tr_len = 0;
pc.printf("Please input the trigger string in the format of Sbbb...bbbE\n\r");
PT_YIELD_UNTIL(pt, keyPressed());
if (key != 'S') {
pc.printf("HOST ERROR\n\r");
PT_EXIT(pt);
}
while (1) {
PT_YIELD_UNTIL(pt, keyPressed());
if (key == 'E') {
pc.printf("\n\r");
if (tr_len == 0) {
pc.printf("HOST ERROR\n\r");
PT_EXIT(pt);
} else {
trigger[tr_len] = '\0';
break;
}
} else if (key == '0' || key == '1') {
trigger[tr_len++] = key;
pc.putc(key);
} else if (key == ' ') {
pc.putc(key);
} else {
pc.printf("\n\rHOST ERROR\n\r");
PT_EXIT(pt);
}
}
// Now we can process to Touch Input
ev = e_ValidInput;
}
PT_END(pt);
}
static
PT_THREAD(pt_touch(struct pt *pt)) {
PT_BEGIN(pt);
while (1) {
PT_YIELD_UNTIL(pt, ev == e_ValidInput);
pc.printf("The trigger string is %s\n\r", trigger);
pc.printf("Please start to touch the button\n\r");
tr_pos = 0;
while(tr_pos < tr_len) {
PT_YIELD_UNTIL(pt, buttonTouched());
pc.putc(key);
if (key != trigger[tr_pos++]) {
pc.printf("\n\rTOUCH ERROR\n\r");
ev = e_Init;
PT_EXIT(pt);
}
}
pc.printf("\n\r");
pc.printf("MATCH\n\r");
ev = e_Init;
PT_EXIT(pt);
}
PT_END(pt);
}
static struct pt pt1, pt2;
int main() {
PT_INIT(&pt1);
PT_INIT(&pt2);
// flag = S_SERIAL;
ev = e_Init;
while (1) {
pt_serial(&pt1);
pt_touch(&pt2);
}
}
int keyPressed() {
key = pc.getc();
return 1;
}
int buttonTouched() {
key = readTouchInput();
return 1;
}
int touchSense_1(void) {
float sample;
ground_1 = 0;
charger_1.mode(PullUp);
charger_1.mode(PullNone);
sample=input_1.read();
if (sample < 0.3) {
return 1;
} else {
return 0;
}
}
int touchSense_2(void) {
float sample;
ground_2 = 0;
charger_2.mode(PullUp);
charger_2.mode(PullNone);
sample=input_2.read();
if (sample < 0.3) {
return 1;
} else {
return 0;
}
}
char readTouchInput() {
while (1) {
if (touchSense_1()) {
myled_1 = 1;
if (!last_1) {
last_1 = 1;
buff_1 = NBUFF;
}
} else {
if (last_1) {
last_1 = 0;
} else {
if (buff_1 == 0) {
if (myled_1) {
myled_1 = 0;
return '0';
}
} else {
buff_1--;
}
}
}
if (touchSense_2()) {
myled_2 = 1;
if (!last_2) {
last_2 = 1;
buff_2 = NBUFF;
}
} else {
if (last_2) {
last_2 = 0;
} else {
if (buff_2 == 0) {
if (myled_2) {
myled_2 = 0;
return '1';
}
} else {
buff_2--;
}
}
}
wait(0.005);
}
}