Jingyuan Dong / Mbed 2 deprecated ForeBackground
Committer:
guruimage
Date:
Wed Dec 01 02:42:55 2010 +0000
Revision:
0:0d3f7e9ad2ce
Foreground and Background program for HW2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
guruimage 0:0d3f7e9ad2ce 1
guruimage 0:0d3f7e9ad2ce 2 #include "mbed.h"
guruimage 0:0d3f7e9ad2ce 3 //input from sensor function work well!!!!!
guruimage 0:0d3f7e9ad2ce 4 #define numsamples 1
guruimage 0:0d3f7e9ad2ce 5
guruimage 0:0d3f7e9ad2ce 6 int twoSensor(void);
guruimage 0:0d3f7e9ad2ce 7 void HostConfig(void);
guruimage 0:0d3f7e9ad2ce 8 void sensorInput(void);
guruimage 0:0d3f7e9ad2ce 9
guruimage 0:0d3f7e9ad2ce 10 AnalogIn input1(p20);
guruimage 0:0d3f7e9ad2ce 11 DigitalIn charger(p19);
guruimage 0:0d3f7e9ad2ce 12 DigitalOut ground(p18);
guruimage 0:0d3f7e9ad2ce 13
guruimage 0:0d3f7e9ad2ce 14
guruimage 0:0d3f7e9ad2ce 15 AnalogIn input2(p17);
guruimage 0:0d3f7e9ad2ce 16 DigitalIn charger2(p16);
guruimage 0:0d3f7e9ad2ce 17 DigitalOut ground2(p15);
guruimage 0:0d3f7e9ad2ce 18
guruimage 0:0d3f7e9ad2ce 19 Serial pc(USBTX, USBRX); // tx, rx
guruimage 0:0d3f7e9ad2ce 20
guruimage 0:0d3f7e9ad2ce 21 int ConfigReady =0;
guruimage 0:0d3f7e9ad2ce 22 int Count = 0;
guruimage 0:0d3f7e9ad2ce 23 int data[5] ={3,3,3,3,3};
guruimage 0:0d3f7e9ad2ce 24 char input[100];
guruimage 0:0d3f7e9ad2ce 25 int i = 0;
guruimage 0:0d3f7e9ad2ce 26 int sensor1EN=0;
guruimage 0:0d3f7e9ad2ce 27 int match=0;
guruimage 0:0d3f7e9ad2ce 28 int sensor2EN=0;
guruimage 0:0d3f7e9ad2ce 29 int num=0;
guruimage 0:0d3f7e9ad2ce 30 int off=0;
guruimage 0:0d3f7e9ad2ce 31 int errorON=0;
guruimage 0:0d3f7e9ad2ce 32 char config[100];
guruimage 0:0d3f7e9ad2ce 33 char temp;
guruimage 0:0d3f7e9ad2ce 34
guruimage 0:0d3f7e9ad2ce 35 int startIn=1;
guruimage 0:0d3f7e9ad2ce 36 int output=0;
guruimage 0:0d3f7e9ad2ce 37
guruimage 0:0d3f7e9ad2ce 38
guruimage 0:0d3f7e9ad2ce 39 int main() {
guruimage 0:0d3f7e9ad2ce 40 for (i=0;i<100;i++)
guruimage 0:0d3f7e9ad2ce 41 {
guruimage 0:0d3f7e9ad2ce 42 input[i]='4';
guruimage 0:0d3f7e9ad2ce 43 config[i]='5';
guruimage 0:0d3f7e9ad2ce 44 }
guruimage 0:0d3f7e9ad2ce 45 pc.attach(&HostConfig);//set interrupt which is the foreground
guruimage 0:0d3f7e9ad2ce 46 //The following is the background:
guruimage 0:0d3f7e9ad2ce 47 while(1) {
guruimage 0:0d3f7e9ad2ce 48
guruimage 0:0d3f7e9ad2ce 49 sensorInput();
guruimage 0:0d3f7e9ad2ce 50 int match=1;
guruimage 0:0d3f7e9ad2ce 51 for(i=0;i<Count;i++){
guruimage 0:0d3f7e9ad2ce 52
guruimage 0:0d3f7e9ad2ce 53 if(input[i]==config[i]){
guruimage 0:0d3f7e9ad2ce 54 match=match*1;
guruimage 0:0d3f7e9ad2ce 55 }
guruimage 0:0d3f7e9ad2ce 56 else{
guruimage 0:0d3f7e9ad2ce 57 match=match*0;
guruimage 0:0d3f7e9ad2ce 58 }
guruimage 0:0d3f7e9ad2ce 59 }
guruimage 0:0d3f7e9ad2ce 60 if (num>0){
guruimage 0:0d3f7e9ad2ce 61 output=1;
guruimage 0:0d3f7e9ad2ce 62 }else{
guruimage 0:0d3f7e9ad2ce 63 output=0;
guruimage 0:0d3f7e9ad2ce 64 }
guruimage 0:0d3f7e9ad2ce 65 if((match==1)&&(output==1)&&(num==Count)){
guruimage 0:0d3f7e9ad2ce 66 pc.printf("MATCH!!\r\n");
guruimage 0:0d3f7e9ad2ce 67 num=0;
guruimage 0:0d3f7e9ad2ce 68
guruimage 0:0d3f7e9ad2ce 69 }
guruimage 0:0d3f7e9ad2ce 70 for(i=0;i<num;i++){
guruimage 0:0d3f7e9ad2ce 71 if(input[i]!=config[i]){
guruimage 0:0d3f7e9ad2ce 72 pc.printf("Your input does NOT MATCH! Please enter your input again!\r\n");
guruimage 0:0d3f7e9ad2ce 73
guruimage 0:0d3f7e9ad2ce 74 num=0;
guruimage 0:0d3f7e9ad2ce 75 }
guruimage 0:0d3f7e9ad2ce 76
guruimage 0:0d3f7e9ad2ce 77 }
guruimage 0:0d3f7e9ad2ce 78 wait(0.005);
guruimage 0:0d3f7e9ad2ce 79 }
guruimage 0:0d3f7e9ad2ce 80 }
guruimage 0:0d3f7e9ad2ce 81
guruimage 0:0d3f7e9ad2ce 82
guruimage 0:0d3f7e9ad2ce 83 void HostConfig(){
guruimage 0:0d3f7e9ad2ce 84
guruimage 0:0d3f7e9ad2ce 85
guruimage 0:0d3f7e9ad2ce 86 temp=pc.getc();
guruimage 0:0d3f7e9ad2ce 87 if (temp == 'S'){
guruimage 0:0d3f7e9ad2ce 88 ConfigReady=1;
guruimage 0:0d3f7e9ad2ce 89 for(i=0;i<Count;i++){
guruimage 0:0d3f7e9ad2ce 90 input[i]=4;
guruimage 0:0d3f7e9ad2ce 91 }
guruimage 0:0d3f7e9ad2ce 92 Count=0;
guruimage 0:0d3f7e9ad2ce 93 }
guruimage 0:0d3f7e9ad2ce 94 if (temp=='E'){
guruimage 0:0d3f7e9ad2ce 95 ConfigReady=0;
guruimage 0:0d3f7e9ad2ce 96 pc.printf("You have input a string:");
guruimage 0:0d3f7e9ad2ce 97 for(i=0;i<Count;i++){
guruimage 0:0d3f7e9ad2ce 98 pc.printf("%c",config[i]);
guruimage 0:0d3f7e9ad2ce 99 }
guruimage 0:0d3f7e9ad2ce 100 pc.printf("! Please enter the %dbit sensor input!\r\n", Count);
guruimage 0:0d3f7e9ad2ce 101 }
guruimage 0:0d3f7e9ad2ce 102
guruimage 0:0d3f7e9ad2ce 103 if ((ConfigReady==1)&&((temp=='1')||(temp=='0')||(temp==' ')||(temp=='S'))){
guruimage 0:0d3f7e9ad2ce 104 if((temp=='1')||(temp=='0')){
guruimage 0:0d3f7e9ad2ce 105 config[Count]=temp;
guruimage 0:0d3f7e9ad2ce 106 Count++;
guruimage 0:0d3f7e9ad2ce 107 }
guruimage 0:0d3f7e9ad2ce 108 }else if(ConfigReady==1){
guruimage 0:0d3f7e9ad2ce 109 pc.printf("HOST ERROR!\r\n");
guruimage 0:0d3f7e9ad2ce 110 }
guruimage 0:0d3f7e9ad2ce 111
guruimage 0:0d3f7e9ad2ce 112 }
guruimage 0:0d3f7e9ad2ce 113
guruimage 0:0d3f7e9ad2ce 114
guruimage 0:0d3f7e9ad2ce 115 void sensorInput(void){
guruimage 0:0d3f7e9ad2ce 116
guruimage 0:0d3f7e9ad2ce 117 for (i=0;i<=3;i++){
guruimage 0:0d3f7e9ad2ce 118 data[i]=data[i+1];
guruimage 0:0d3f7e9ad2ce 119 }
guruimage 0:0d3f7e9ad2ce 120 data[4]=twoSensor();
guruimage 0:0d3f7e9ad2ce 121 off=1;
guruimage 0:0d3f7e9ad2ce 122 for (i=0;i<=4;i++){
guruimage 0:0d3f7e9ad2ce 123 if (data[i]==3){
guruimage 0:0d3f7e9ad2ce 124 off=off*1;
guruimage 0:0d3f7e9ad2ce 125 }else{
guruimage 0:0d3f7e9ad2ce 126 off=off*0;
guruimage 0:0d3f7e9ad2ce 127 if(data[i]==2){
guruimage 0:0d3f7e9ad2ce 128 errorON=1;
guruimage 0:0d3f7e9ad2ce 129 sensor1EN=0;
guruimage 0:0d3f7e9ad2ce 130 sensor2EN=0;
guruimage 0:0d3f7e9ad2ce 131 }
guruimage 0:0d3f7e9ad2ce 132 if(data[i]==0){
guruimage 0:0d3f7e9ad2ce 133 if(errorON==0){
guruimage 0:0d3f7e9ad2ce 134 sensor1EN=1;
guruimage 0:0d3f7e9ad2ce 135 }
guruimage 0:0d3f7e9ad2ce 136 }
guruimage 0:0d3f7e9ad2ce 137 if(data[i]==1){
guruimage 0:0d3f7e9ad2ce 138 if(errorON==0){
guruimage 0:0d3f7e9ad2ce 139 sensor2EN=1;
guruimage 0:0d3f7e9ad2ce 140 }
guruimage 0:0d3f7e9ad2ce 141 }
guruimage 0:0d3f7e9ad2ce 142 }
guruimage 0:0d3f7e9ad2ce 143 }
guruimage 0:0d3f7e9ad2ce 144
guruimage 0:0d3f7e9ad2ce 145 if((off==1)&&(sensor1EN==1)){
guruimage 0:0d3f7e9ad2ce 146 input[num]='0';
guruimage 0:0d3f7e9ad2ce 147 pc.printf("You have input a 0!\r\n");
guruimage 0:0d3f7e9ad2ce 148 sensor1EN=0;
guruimage 0:0d3f7e9ad2ce 149 num++;
guruimage 0:0d3f7e9ad2ce 150 }
guruimage 0:0d3f7e9ad2ce 151 if((off==1)&&(sensor2EN==1)){
guruimage 0:0d3f7e9ad2ce 152 input[num]='1';
guruimage 0:0d3f7e9ad2ce 153 pc.printf("You have input a 1!\r\n");
guruimage 0:0d3f7e9ad2ce 154 sensor2EN=0;
guruimage 0:0d3f7e9ad2ce 155 num++;
guruimage 0:0d3f7e9ad2ce 156 }
guruimage 0:0d3f7e9ad2ce 157 if ((off==1)&&(errorON==1)){
guruimage 0:0d3f7e9ad2ce 158 pc.printf("TOUCH ERROR!\r\n");
guruimage 0:0d3f7e9ad2ce 159 errorON=0;
guruimage 0:0d3f7e9ad2ce 160 }
guruimage 0:0d3f7e9ad2ce 161 if(num==99){
guruimage 0:0d3f7e9ad2ce 162 num=0;
guruimage 0:0d3f7e9ad2ce 163 }
guruimage 0:0d3f7e9ad2ce 164 }
guruimage 0:0d3f7e9ad2ce 165
guruimage 0:0d3f7e9ad2ce 166 int twoSensor (void)
guruimage 0:0d3f7e9ad2ce 167 {
guruimage 0:0d3f7e9ad2ce 168 float sample1;
guruimage 0:0d3f7e9ad2ce 169 float sample2;
guruimage 0:0d3f7e9ad2ce 170 ground=0;
guruimage 0:0d3f7e9ad2ce 171 charger.mode(PullUp);
guruimage 0:0d3f7e9ad2ce 172 charger.mode(PullNone);
guruimage 0:0d3f7e9ad2ce 173 sample1=input1.read();
guruimage 0:0d3f7e9ad2ce 174
guruimage 0:0d3f7e9ad2ce 175 ground2=0;
guruimage 0:0d3f7e9ad2ce 176 charger2.mode(PullUp);
guruimage 0:0d3f7e9ad2ce 177 charger2.mode(PullNone);
guruimage 0:0d3f7e9ad2ce 178 sample2=input2.read();
guruimage 0:0d3f7e9ad2ce 179
guruimage 0:0d3f7e9ad2ce 180 if ((sample1<0.4)&&(sample2>=0.4)){
guruimage 0:0d3f7e9ad2ce 181 return 0;
guruimage 0:0d3f7e9ad2ce 182 }
guruimage 0:0d3f7e9ad2ce 183 else if ((sample2<0.4)&&(sample1>=0.4)){
guruimage 0:0d3f7e9ad2ce 184 return 1;
guruimage 0:0d3f7e9ad2ce 185 }
guruimage 0:0d3f7e9ad2ce 186 else if ((sample2<0.4)&&(sample1<0.4)){
guruimage 0:0d3f7e9ad2ce 187 return 2;
guruimage 0:0d3f7e9ad2ce 188 }
guruimage 0:0d3f7e9ad2ce 189 else if((sample1>=0.4)&&(sample2>=0.4)){
guruimage 0:0d3f7e9ad2ce 190 return 3;
guruimage 0:0d3f7e9ad2ce 191 }
guruimage 0:0d3f7e9ad2ce 192 }