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:
- guruimage
- Date:
- 2010-12-01
- Revision:
- 0:9b9c31c57895
File content as of revision 0:9b9c31c57895:
#include "pt.h"
#include "mbed.h"
#define numsamples 1
static struct pt project_pt;
static struct pt project2_pt;
int twoSensor(void);//get sensor return data;
void HostConfig(void);//get trigger string from HOST computer
void sensorInput(void);//store sensor input data in mbed
AnalogIn input1(p20);
DigitalIn charger(p19);
DigitalOut ground(p18);
AnalogIn input2(p17);
DigitalIn charger2(p16);
DigitalOut ground2(p15);
Serial pc(USBTX, USBRX); // tx, rx
int ConfigReady =0;
int Count = 0;
int data[5] ={3,3,3,3,3};
char input[100];
int i = 0;
int sensor1EN=0;
int match;
int sensor2EN=0;
int num=0;
int off=0;
int errorON=0;
char config[100];
char temp;
int notmat=0;
int startIn=1;
int output=0;
//two PT_THREAD here
PT_THREAD(Match(struct pt *pt))
{
PT_BEGIN(pt)
while(1){
PT_WAIT_UNTIL(pt,(match==1)&&(num>0)&&(num==Count));
pc.printf("MATCH!!\r\n");
num=0;
}
PT_END(pt);
}
PT_THREAD(notMatch(struct pt *pt))
{
PT_BEGIN(pt);
while(1){
PT_WAIT_UNTIL(pt,notmat==1);
pc.printf("Your input does NOT MATCH! Please enter your input again!\r\n");
num=0;
notmat=0;
}
PT_END(pt);
}
int main(){
for (i=0;i<100;i++)
{
input[i]='4';
config[i]='5';
}
PT_INIT(&project_pt);
PT_INIT(&project2_pt);
while(1) {
Match(&project_pt);
HostConfig();
sensorInput();
match=1;
for(i=0;i<Count;i++){
if(input[i]==config[i]){
match=match*1;
}
else{
match=match*0;
}
}
for(i=0;i<num;i++){
if(input[i]!=config[i]){
notmat=1;
}
}
notMatch(&project2_pt);
wait(0.005);
}
return 0;
}
void HostConfig(){
while(pc.readable()){
temp=pc.getc();
if (temp == 'S'){
ConfigReady=1;
Count=0;
}
if (temp=='E'){
ConfigReady=0;
pc.printf("You have input a string:");
for(i=0;i<Count;i++){
pc.printf("%c",config[i]);
}
pc.printf("! Please enter the %dbit sensor input!\r\n", Count);
}
if ((ConfigReady==1)&&((temp=='1')||(temp=='0')||(temp==' ')||(temp=='S'))){
if((temp=='1')||(temp=='0')){
config[Count]=temp;
Count++;
}
}else if(ConfigReady==1){
pc.printf("HOST ERROR!");
}
}
}
//This function is used to enable the sensor input to be stable. And store them in integer array input.
void sensorInput(void){
for (i=0;i<=3;i++){
data[i]=data[i+1];
}
data[4]=twoSensor();
off=1;
for (i=0;i<=4;i++){
if (data[i]==3){
off=off*1;
}else{
off=off*0;
if(data[i]==2){
errorON=1;
sensor1EN=0;
sensor2EN=0;
}
if(data[i]==0){
if(errorON==0){
sensor1EN=1;
}
}
if(data[i]==1){
if(errorON==0){
sensor2EN=1;
}
}
}
}
if((off==1)&&(sensor1EN==1)){
input[num]='0';
pc.printf("You have input a 0!\r\n");
sensor1EN=0;
num++;
}
if((off==1)&&(sensor2EN==1)){
input[num]='1';
pc.printf("You have input a 1!\r\n");
sensor2EN=0;
num++;
}
if ((off==1)&&(errorON==1)){
pc.printf("TOUCH ERROR!");
errorON=0;
}
if(num==99){
num=0;
}
}
int twoSensor (void)
{
float sample1;
float sample2;
ground=0;
charger.mode(PullUp);
charger.mode(PullNone);
sample1=input1.read();
ground2=0;
charger2.mode(PullUp);
charger2.mode(PullNone);
sample2=input2.read();
if ((sample1<0.4)&&(sample2>=0.4)){
return 0;
}
else if ((sample2<0.4)&&(sample1>=0.4)){
return 1;
}
else if ((sample2<0.4)&&(sample1<0.4)){
return 2;
}
else if((sample1>=0.4)&&(sample2>=0.4)){
return 3;
}
}