Takeuchi Kouichi
/
2ck0706_mbed CWd_Ver1
エレキジャックweb mbed入門 mbed CWデコーダ 完成形です。CWd Ver1.0とします。細かなバグを修正してあります。デコーダ基板が必要です。
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 // CW13 = CWd Ver1.0 00002 // BT AR taiou 00003 // Wabun 00004 // SW tuika 00005 // hore taiou 00006 // wabun (OUBUN) wabun 00007 // CQ hore taiou 00008 00009 #include "mbed.h" 00010 #include "TextLCD0420.h" 00011 00012 #define ON 1 00013 #define OFF 0 00014 #define XON 0 00015 #define XOFF 1 00016 #define XHI 0 00017 #define XLOW 1 00018 #define HI 1 00019 #define LOW 00020 #define OUBUN 1 00021 #define WABUN 0 00022 #define AUTO 1 00023 #define MANUAL 0 00024 #define KN 44 00025 #define AS 33 00026 #define CT 52 00027 #define BT 48 00028 #define AR 41 00029 #define HH 255 00030 #define VA 103 00031 #define HORE 120 00032 #define RATA 39 00033 00034 DigitalOut mled1(LED1); 00035 DigitalOut mled2(LED2); 00036 DigitalOut mled3(LED3); 00037 DigitalOut mled4(LED4); 00038 DigitalIn CW(p5); 00039 DigitalIn SP_SELECT(p6); 00040 DigitalIn GENGO_MODE(p7); 00041 DigitalIn GENGO_SELECT(p8); 00042 00043 TextLCD lcd(p24, p25, p26, p27, p28, p29, p30,20,4); // rs, rw, e, d0, d1, d2, d3 00044 00045 int retu,gyou; 00046 char g2[20],g3[20]; 00047 int init_flag=ON; 00048 int min_ms,max_ms; 00049 int gengo,wabun_temp; 00050 00051 void lcd_scprintf(char pdata){ 00052 int i; 00053 00054 if(init_flag==ON){ 00055 if(gyou==1){ 00056 lcd.locate(retu,1); 00057 lcd.printf("%c",pdata); 00058 retu++; 00059 if(retu==20){ 00060 gyou=2; 00061 retu=0; 00062 } 00063 } 00064 else if(gyou==2){ 00065 lcd.locate(retu,2); 00066 lcd.printf("%c",pdata); 00067 g2[retu]=pdata; 00068 retu++; 00069 if(retu==20){ 00070 retu=0; 00071 gyou=3; 00072 } 00073 } 00074 else if(gyou==3){ 00075 lcd.locate(retu,3); 00076 lcd.printf("%c",pdata); 00077 g3[retu]=pdata; 00078 retu++; 00079 if(retu==20){ 00080 retu=0; 00081 gyou=1; 00082 for(i=0;i<20;i++){ 00083 lcd.locate(i,1); 00084 lcd.printf("%c",g2[i]); 00085 } 00086 for(i=0;i<20;i++){ 00087 lcd.locate(i,2); 00088 lcd.printf("%c",g3[i]); 00089 g2[i]=g3[i]; 00090 } 00091 lcd.locate(0,3); 00092 lcd.printf(" "); 00093 init_flag=OFF; 00094 } 00095 } 00096 } 00097 if(init_flag==OFF){ 00098 gyou=3; 00099 lcd.locate(retu,3); 00100 lcd.printf("%c",pdata); 00101 g3[retu]=pdata; 00102 retu++; 00103 if(retu==20){ 00104 for(i=0;i<20;i++){ 00105 lcd.locate(i,1); 00106 lcd.printf("%c",g2[i]); 00107 lcd.locate(i,2); 00108 lcd.printf("%c",g3[i]); 00109 g2[i]=g3[i]; 00110 } 00111 lcd.locate(0,3); 00112 lcd.printf(" "); 00113 retu=0; 00114 } 00115 } 00116 } 00117 00118 void set_speed(){ 00119 if(SP_SELECT==HI){ 00120 min_ms=30; 00121 max_ms=90; 00122 lcd.locate(5,0); 00123 lcd.printf("H"); 00124 } 00125 else{ 00126 min_ms=70; 00127 max_ms=210; 00128 lcd.locate(5,0); 00129 lcd.printf("L"); 00130 } 00131 } 00132 00133 void lcd_manual(){ 00134 lcd.locate(6,0); 00135 lcd.printf("M"); 00136 } 00137 00138 void lcd_auto(){ 00139 lcd.locate(6,0); 00140 lcd.printf("A"); 00141 } 00142 00143 void lcd_alpha(){ 00144 lcd.locate(7,0); 00145 lcd.printf("A"); 00146 } 00147 void lcd_kana(){ 00148 lcd.locate(7,0); 00149 lcd.printf("%c",0xb6); 00150 } 00151 00152 void set_gengo(){ 00153 if(GENGO_MODE==MANUAL){// Gengo Manual mode 00154 lcd_manual(); 00155 if(GENGO_SELECT==OUBUN){// manual wabun 00156 gengo=OUBUN; 00157 } 00158 else if(GENGO_SELECT==WABUN){// manual oubun 00159 gengo=WABUN; 00160 wabun_temp=WABUN; 00161 } 00162 } 00163 else if(GENGO_MODE==AUTO){// Gengo Auto mode 00164 lcd_auto(); 00165 } 00166 } 00167 00168 int main() { 00169 00170 int i,j,k; 00171 int code[8]; 00172 int scount; 00173 char mj[115],mjj[121],c1,c2; 00174 int cw_sum,tan_sum,tanten,cpm; 00175 char cw_class; 00176 00177 // Alphabet 00178 for(i=0;i<115;i++){ 00179 mj[i]=' '; 00180 } 00181 mj[5]='A';mj[16]='B';mj[20]='C';mj[8]='D';mj[1]='E'; 00182 mj[19]='F';mj[10]='G';mj[15]='H';mj[3]='I';mj[29]='J'; 00183 mj[12]='K';mj[17]='L';mj[6]='M';mj[4]='N';mj[14]='O'; 00184 mj[21]='P';mj[26]='Q';mj[9]='R';mj[7]='S';mj[2]='T'; 00185 mj[11]='U';mj[23]='V';mj[13]='W';mj[24]='X';mj[28]='Y'; 00186 mj[18]='Z'; 00187 mj[61]='1';mj[59]='2';mj[55]='3';mj[47]='4';mj[31]='5'; 00188 mj[32]='6';mj[34]='7';mj[38]='8';mj[46]='9';mj[62]='0'; 00189 mj[105]='.';mj[114]=',';mj[75]='?';mj[48]='=';mj[96]='-'; 00190 mj[70]=':';mj[93]='\'';mj[44]='(';mj[108]=')';mj[40]='/'; 00191 mj[85]='@'; 00192 //mj[41]='+'; 00193 00194 // Kanamoji 00195 for(i=0;i<121;i++){ 00196 mjj[i]=' '; 00197 } 00198 mjj[58]=0xb1;mjj[5]=0xb2;mjj[11]=0xb3;mjj[60]=0xb4;mjj[33]=0xb5;//a 00199 mjj[17]=0xb6;mjj[36]=0xb7;mjj[23]=0xb8;mjj[28]=0xb9;mjj[30]=0xba;//ka 00200 mjj[52]=0xbb;mjj[42]=0xbc;mjj[54]=0xbd;mjj[45]=0xbe;mjj[22]=0xbf;//sa 00201 mjj[4]=0xc0;mjj[19]=0xc1;mjj[21]=0xc2;mjj[57]=0xc3;mjj[35]=0xc4;//ta 00202 mjj[9]=0xc5;mjj[20]=0xc6;mjj[15]=0xc7;mjj[26]=0xc8;mjj[27]=0xc9;//na 00203 mjj[16]=0xca;mjj[50]=0xcb;mjj[18]=0xcc;mjj[1]=0xcd;mjj[8]=0xce;//ha 00204 mjj[24]=0xcf;mjj[51]=0xd0;mjj[2]=0xd1;mjj[48]=0xd2;mjj[40]=0xd3;//ma 00205 mjj[13]=0xd4;mjj[56]=0xd5;mjj[6]=0xd6;//ya 00206 mjj[7]=0xd7;mjj[10]=0xd8;mjj[44]=0xd9;mjj[14]=0xda;mjj[25]=0xdb;//ra 00207 mjj[12]=0xdc;mjj[49]=0xb2;mjj[37]=0xb4;mjj[29]=0xa6;mjj[41]=0xdd;//wa 00208 mjj[53]=0xb0;mjj[43]=0xdf;mjj[105]=','; 00209 mjj[3]=0xde;mjj[73]=0xa3; 00210 mjj[108]='(';mjj[81]=')'; 00211 mjj[61]='1';mjj[59]='2';mjj[55]='3';mjj[47]='4';mjj[31]='5'; 00212 mjj[32]='6';mjj[34]='7';mjj[38]='8';mjj[46]='9';mjj[62]='0'; 00213 00214 lcd.cls(); 00215 lcd.printf("*CWd "); 00216 00217 for(i=0;i<8;i++){ 00218 code[i]=0; 00219 } 00220 00221 i=0; 00222 tan_sum=0; 00223 set_speed(); 00224 c1=' ',c2=' '; 00225 00226 set_gengo(); 00227 00228 while( i<5 ){// System initialize 00229 lcd.locate(8,0); 00230 lcd.printf("%2d",5-i); 00231 scount=0; 00232 while(CW==XLOW){ 00233 } 00234 mled1=ON; 00235 while(CW==XHI){ 00236 scount++; 00237 wait_ms(1); 00238 } 00239 mled1=OFF; 00240 if(min_ms < scount && scount < max_ms){ 00241 tan_sum=tan_sum+scount; 00242 i++; 00243 } 00244 00245 }//while i 00246 00247 tanten=tan_sum/5; 00248 00249 j=0; 00250 k=0; 00251 tan_sum=0; 00252 gyou=1,retu=0; 00253 gengo=OUBUN; 00254 wabun_temp=OUBUN; 00255 while(1){ 00256 set_speed();// speed Hi/LO 00257 set_gengo(); 00258 while(CW==XLOW){// signal Low wait 00259 } 00260 00261 scount=0; 00262 mled1=ON; 00263 while(CW==XHI){// ._ count 00264 wait_ms(1); 00265 scount++; 00266 } 00267 mled1=OFF; 00268 00269 if(min_ms < scount && scount < max_ms){ 00270 //lcd.printf("."); 00271 code[k]=1; 00272 k++; 00273 tan_sum=tan_sum+scount; 00274 j++; 00275 } 00276 00277 else if ( scount > tanten*2.0){ 00278 //lcd.printf("_"); 00279 code[k]=2; 00280 k++; 00281 tan_sum=tan_sum+scount/3; 00282 j++; 00283 } 00284 00285 lcd.locate(8,0);// moji kousei status 00286 lcd.printf("%2d",k); 00287 00288 scount=0; 00289 while(CW==XLOW){ 00290 wait_ms(1); 00291 scount++; 00292 if(scount > tanten*10){ 00293 break; 00294 } 00295 } 00296 00297 if(k>8){// moji kousei over flow 00298 k=0; 00299 lcd_scprintf('*'); 00300 for(i=0;i<=7;i++){ 00301 code[i]=0; 00302 } 00303 } 00304 00305 if(gengo==OUBUN && scount > tanten*2.0){// Oubun shori 00306 lcd_alpha(); 00307 cw_sum=0; 00308 for(i=0;i<=7;i++){ 00309 cw_sum=cw_sum+code[i]*int(pow(2.0,i)); 00310 } 00311 00312 if(GENGO_MODE==AUTO && (cw_sum==HORE || cw_sum==58 ||cw_sum==28 || cw_sum==33 || cw_sum==36 00313 || cw_sum==30 ||cw_sum==25) ){// hore a e o ki ko ro 00314 lcd_scprintf('[');lcd_scprintf(0xce);lcd_scprintf( 0xda);lcd_scprintf(']');//ho re 00315 if(c1=='C' && c2=='Q'){// CQ hore oubun keep 00316 // 00317 } 00318 else{ 00319 gengo=WABUN; 00320 wabun_temp=WABUN; 00321 cw_sum=0; 00322 } 00323 }// if gengo auto 00324 else if(cw_sum==BT){ 00325 lcd_scprintf('[');lcd_scprintf('B');lcd_scprintf('T');lcd_scprintf(']'); 00326 } 00327 else if(cw_sum==KN){ 00328 lcd_scprintf('[');lcd_scprintf('K');lcd_scprintf('N');lcd_scprintf(']'); 00329 } 00330 else if(cw_sum==AR){ 00331 lcd_scprintf('[');lcd_scprintf('A');lcd_scprintf('R');lcd_scprintf(']'); 00332 } 00333 else if(cw_sum==HH){ 00334 lcd_scprintf('[');lcd_scprintf('H');lcd_scprintf('H');lcd_scprintf(']'); 00335 } 00336 else if(cw_sum==AS){ 00337 lcd_scprintf('[');lcd_scprintf('A');lcd_scprintf('S');lcd_scprintf(']'); 00338 } 00339 else if(cw_sum==CT){ 00340 lcd_scprintf('[');lcd_scprintf('C');lcd_scprintf('T');lcd_scprintf(']'); 00341 } 00342 else if(cw_sum==VA){ 00343 lcd_scprintf('[');lcd_scprintf('V');lcd_scprintf('A');lcd_scprintf(']'); 00344 } 00345 else if(cw_sum > 115){ 00346 lcd_scprintf('*'); 00347 cw_sum=0; 00348 } 00349 else { 00350 lcd_scprintf(mj[cw_sum]); 00351 c1=c2;// CQ hore taiou 00352 c2=mj[cw_sum]; 00353 } 00354 k=0; 00355 for(i=0;i<=7;i++){ 00356 code[i]=0; 00357 } 00358 }//if oubun 00359 00360 if(gengo==WABUN && scount > tanten*2.0){// Wabun shori 00361 lcd_kana(); 00362 cw_sum=0; 00363 for(i=0;i<=7;i++){ 00364 cw_sum=cw_sum+code[i]*int(pow(2.0,i)); 00365 } 00366 00367 if(GENGO_MODE==AUTO && cw_sum==RATA){// ra ta 00368 lcd_scprintf('[');lcd_scprintf(0xd7);lcd_scprintf(0xc0);lcd_scprintf(']');//ra ta 00369 gengo=OUBUN; 00370 wabun_temp=OUBUN; 00371 } 00372 if(cw_sum==81){// ) 00373 wabun_temp=WABUN; 00374 lcd_kana(); 00375 } 00376 else if(cw_sum > 121){ 00377 cw_sum=0; 00378 lcd_scprintf(' '); 00379 } 00380 00381 if(wabun_temp==WABUN){ 00382 lcd_scprintf(mjj[cw_sum]); 00383 c1=c2;//CQ hore taiou 00384 c2=mjj[cw_sum]; 00385 } 00386 else if(wabun_temp==OUBUN){ 00387 lcd_scprintf(mj[cw_sum]); 00388 c1=c2;//CQ hore taiou 00389 c2=mj[cw_sum]; 00390 } 00391 00392 if(cw_sum==108){// ( 00393 wabun_temp=OUBUN; 00394 lcd_alpha(); 00395 } 00396 00397 k=0; 00398 for(i=0;i<=7;i++){ 00399 code[i]=0; 00400 } 00401 }//if wabun 00402 00403 if(scount > tanten*7){// tango kan space 00404 lcd_scprintf(' '); 00405 } 00406 00407 if(j==10){// ._ nagasa heikin keisan 00408 tanten=tan_sum/10; 00409 cpm=60000/(tanten*57)*5; 00410 tan_sum=0; 00411 j=0; 00412 if(cpm > 100){// Professional 00413 cw_class='P'; 00414 } 00415 else if(cpm > 90){ // Special 00416 cw_class='S'; 00417 } 00418 else if(cpm > 65){// 1ama 00419 cw_class='1'; 00420 } 00421 else if(cpm > 40){// 2ama 00422 cw_class='2'; 00423 } 00424 else if(cpm > 30){//3 ama 00425 cw_class='3'; 00426 } 00427 lcd.locate(11,0); 00428 lcd.printf("%3dc(%c)",cpm,cw_class);// cw class hantei 00429 //lcd.printf("%3dc,%3dm",cpm,tanten); 00430 } 00431 }//while 1 00432 }//main
Generated on Fri Jul 29 2022 20:12:33 by 1.7.2