Yasushi TAUCHI / Mbed 2 deprecated jjy

Dependencies:   mbed-rtos mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 DigitalOut led1(LED1);
00004 DigitalOut led2(LED2);
00005 DigitalOut led3(LED3);
00006 DigitalOut led4(LED4);
00007 
00008 Queue<uint32_t, 5> queue;
00009 
00010 DigitalIn jjy(p20);
00011 
00012 Serial pc(USBTX, USBRX);
00013 
00014 char rcv[100];
00015 char timing=0;
00016 void jjy_rcv(void const *n)
00017 {
00018     static int count=0;
00019     if(jjy) {
00020         rcv[count]=1;
00021     } else {
00022         rcv[count]=0;
00023     }
00024     led1=rcv[count];
00025     if(count==timing) {
00026         queue.put((uint32_t*)1);
00027         //printf("thread out timing=%d \n\r",timing);
00028     }
00029     //  pc.printf("%d %d \n\r",count,rcv[count]);
00030     if(count==99)
00031         count=0;
00032     else
00033         count++;
00034 }
00035 
00036 int main()
00037 {
00038     unsigned char state=0;
00039     unsigned char sig,old_sig;
00040     unsigned char count1=0;
00041     bool flag1,flag2;
00042     char m,h;
00043     char mm[3];
00044     int i,j;
00045     char sum_rcv[100];
00046     pc.baud(115200);
00047     flag1=true;
00048     flag2=true;
00049     old_sig=9;
00050     m=0;h=0;
00051     for(i=0; i<100; i++)sum_rcv[i]=0;
00052     RtosTimer jjy_rcv_timer(jjy_rcv, osTimerPeriodic,(void *)0);
00053     jjy_rcv_timer.start(10); //10mS
00054     printf("*********************stage1 (Sync)*********************\n\r");
00055     while (flag1) {
00056         osEvent evt = queue.get();
00057         if (evt.status == osEventMessage) {
00058             printf("%d thread out timing=%d \n\r",count1,timing);
00059             for(i=0; i<100; i++)sum_rcv[i]+=rcv[i];
00060             if(count1==20) {
00061                 for(i=1; i<100; i++) {
00062                     if(sum_rcv[i]>18) {
00063                         timing=i-1;
00064                         flag1=false;
00065                         break;
00066                     }
00067                 }
00068                 if(flag1==true) {
00069                     count1=0;
00070                     for(i=0; i<100; i++)sum_rcv[i]=0;
00071                 }
00072             } else {
00073                 count1++;
00074             }
00075         }
00076     }
00077 //for(i=0; i<100; i++)printf("%d %d \n\r",i,sum_rcv[i]);
00078     printf("*********************stage1 end*****************************\n\r");
00079     printf("timing= %d\n\r",timing);
00080     osEvent evt = queue.get();
00081     printf("*********************stage2 time setting********************\n\r");
00082     state=0;
00083     while (flag2) {
00084         osEvent evt = queue.get();
00085         if (evt.status == osEventMessage) {
00086             j=0;
00087             for(i=0; i<100; i++)j+=rcv[i];
00088             if(j<30) {
00089                 sig=2;
00090                 strcpy(mm,"M");
00091                 led2=1;
00092                 led3=0;
00093                 led4=0;
00094             } else {
00095                 if(j<65) {
00096                     sig=1;
00097                     strcpy(mm,"1");
00098                     led2=0;
00099                     led3=1;
00100                     led4=0;
00101                 } else {
00102                     if(j<90) {
00103                         sig=0;
00104                         strcpy(mm,"0");
00105                         led2=0;
00106                         led3=0;
00107                         led4=1;
00108                     } else {
00109                         sig=9;
00110                         strcpy(mm,"?");
00111                         led2=1;
00112                         led3=1;
00113                         led4=1;
00114                     }
00115                 }
00116             }
00117             printf("Signal %d %s\n\r",j,mm);
00118 
00119             switch(state) {
00120                 case 0:
00121                     if((old_sig==2)&&(sig==2)) {
00122                         state=1;
00123                     }
00124                     break;
00125                 case 1:
00126                     if((sig==0)||(sig==1)) {
00127                         m=40*sig;
00128                         state=2;
00129                     } else {
00130                         state=0;
00131                     }
00132                     break;
00133                 case 2:
00134                     if((sig==0)||(sig==1)) {
00135                         m+=20*sig;
00136                         state=3;
00137                     } else {
00138                         state=0;
00139                     }
00140                     break;
00141                 case 3:
00142                     if((sig==0)||(sig==1)) {
00143                         m+=10*sig;
00144                         state=4;
00145                     } else {
00146                         state=0;
00147                     }
00148                     break;
00149                 case 4:
00150                     if((sig==0)||(sig==1)) {
00151                         state=5;
00152                     } else {
00153                         state=0;
00154                     }
00155                     break;
00156                 case 5:
00157                     if((sig==0)||(sig==1)) {
00158                         m+=8*sig;
00159                         state=6;
00160                     } else {
00161                         state=0;
00162                     }
00163                     break;
00164                 case 6:
00165                     if((sig==0)||(sig==1)) {
00166                         m+=4*sig;
00167                         state=7;
00168                     } else {
00169                         state=0;
00170                     }
00171                     break;
00172                 case 7:
00173                     if((sig==0)||(sig==1)) {
00174                         m+=2*sig;
00175                         state=8;
00176                     } else {
00177                         state=0;
00178                     }
00179                     break;
00180                 case 8:
00181                     if((sig==0)||(sig==1)) {
00182                         m+=sig;
00183                         state=9;
00184                     } else {
00185                         state=0;
00186                     }
00187                     break;
00188                 case 9:
00189                     state=10;
00190                     break;
00191                 case 10:
00192                     if((sig==0)||(sig==1)) {
00193                         state=11;
00194                     } else {
00195                         state=0;
00196                     }
00197                     break;
00198                 case 11:
00199                     if((sig==0)||(sig==1)) {
00200                         state=12;
00201                     } else {
00202                         state=0;
00203                     }
00204                     break;
00205                 case 12:
00206                     if((sig==0)||(sig==1)) {
00207                         h=20*sig;
00208                         state=13;
00209                     } else {
00210                         state=0;
00211                     }
00212                     break;
00213                 case 13:
00214                     if((sig==0)||(sig==1)) {
00215                         h+=10*sig;
00216                         state=14;
00217                     } else {
00218                         state=0;
00219                     }
00220                     break;
00221                 case 14:
00222                     if((sig==0)||(sig==1)) {
00223                         state=15;
00224                     } else {
00225                         state=0;
00226                     }
00227                     break;
00228                 case 15:
00229                     if((sig==0)||(sig==1)) {
00230                         h+=8*sig;
00231                         state=16;
00232                     } else {
00233                         state=0;
00234                     }
00235                     break;
00236                 case 16:
00237                     if((sig==0)||(sig==1)) {
00238                         h+=4*sig;
00239                         state=17;
00240                     } else {
00241                         state=0;
00242                     }
00243                     break;
00244                 case 17:
00245                     if((sig==0)||(sig==1)) {
00246                         h+=2*sig;
00247                         state=18;
00248                     } else {
00249                         state=0;
00250                     }
00251                     break;
00252                 case 18:
00253                     if((sig==0)||(sig==1)) {
00254                         h+=sig;
00255                         state=19;
00256                     } else {
00257                         state=0;
00258                     }
00259                     break;
00260                 case 19:
00261                     flag2=0;
00262                     state=0;
00263                     break;
00264             }
00265             printf("%d   %02d:%02d \n\r",state,h,m);
00266             old_sig=sig;
00267         }
00268     }
00269     jjy_rcv_timer.stop();
00270     printf("Now = %02d:%02d:20 \n\r",h,m);
00271 }