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
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 }
Generated on Tue Jul 12 2022 21:25:51 by
1.7.2