Takeuchi Kouichi
/
2ck0705_mbed CW12
エレキジャックweb mbed入門 mbed CWデコーダ課題12です。CQを受信した直後に”ホレ”を受信しても和文に切り替えない機能を追加します。デコーダ基板が必要です。
main.cpp
- Committer:
- takeuchi
- Date:
- 2012-07-16
- Revision:
- 0:3ffac5cf9402
File content as of revision 0:3ffac5cf9402:
// CW12 // BT AR taiou // Wabun // SW tuika // hore taiou // wabun (OUBUN) wabun // CQ hore taiou #include "mbed.h" #include "TextLCD0420.h" #define ON 1 #define OFF 0 #define XON 0 #define XOFF 1 #define XHI 0 #define XLOW 1 #define HI 1 #define LOW 0 #define OUBUN 1 #define WABUN 0 #define AUTO 1 #define MANUAL 0 #define KN 44 #define AS 33 #define CT 52 #define BT 48 #define AR 41 #define HH 255 #define VA 103 #define HORE 120 DigitalOut mled1(LED1); DigitalOut mled2(LED2); DigitalOut mled3(LED3); DigitalOut mled4(LED4); DigitalIn CW(p5); DigitalIn SP_SELECT(p6); DigitalIn GENGO_MODE(p7); DigitalIn GENGO_SELECT(p8); TextLCD lcd(p24, p25, p26, p27, p28, p29, p30,20,4); // rs, rw, e, d0, d1, d2, d3 int retu,gyou; char g2[20],g3[20]; int init_flag=ON; int min_ms,max_ms; void lcd_scprintf(char pdata){ int i; if(init_flag==ON){ if(gyou==1){ lcd.locate(retu,1); lcd.printf("%c",pdata); retu++; if(retu==20){ gyou=2; retu=0; } } else if(gyou==2){ lcd.locate(retu,2); lcd.printf("%c",pdata); g2[retu]=pdata; retu++; if(retu==20){ retu=0; gyou=3; } } else if(gyou==3){ lcd.locate(retu,3); lcd.printf("%c",pdata); g3[retu]=pdata; retu++; if(retu==20){ retu=0; gyou=1; for(i=0;i<20;i++){ lcd.locate(i,1); lcd.printf("%c",g2[i]); } for(i=0;i<20;i++){ lcd.locate(i,2); lcd.printf("%c",g3[i]); g2[i]=g3[i]; } lcd.locate(0,3); lcd.printf(" "); init_flag=OFF; } } } if(init_flag==OFF){ gyou=3; lcd.locate(retu,3); lcd.printf("%c",pdata); g3[retu]=pdata; retu++; if(retu==20){ for(i=0;i<20;i++){ lcd.locate(i,1); lcd.printf("%c",g2[i]); lcd.locate(i,2); lcd.printf("%c",g3[i]); g2[i]=g3[i]; } lcd.locate(0,3); lcd.printf(" "); retu=0; } } } void set_speed(){ if(SP_SELECT==HI){ min_ms=30; max_ms=90; lcd.locate(5,0); lcd.printf("H"); } else if(SP_SELECT==LOW){ min_ms=70; max_ms=210; lcd.locate(5,0); lcd.printf("L"); } } void lcd_manual(){ lcd.locate(6,0); lcd.printf("M"); } void lcd_auto(){ lcd.locate(6,0); lcd.printf("A"); } void lcd_alpha(){ lcd.locate(7,0); lcd.printf("A"); } void lcd_kana(){ lcd.locate(7,0); lcd.printf("%c",0xb6); } int main() { int i,j,k; int code[8]; int scount; char mj[115],mjj[121],c1,c2; int cw_sum,tan_sum,tanten,cpm; int gengo,wabun_temp; char cw_class; for(i=0;i<115;i++){ mj[i]=' '; } mj[5]='A';mj[16]='B';mj[20]='C';mj[8]='D';mj[1]='E'; mj[19]='F';mj[10]='G';mj[15]='H';mj[3]='I';mj[29]='J'; mj[12]='K';mj[17]='L';mj[6]='M';mj[4]='N';mj[14]='O'; mj[21]='P';mj[26]='Q';mj[9]='R';mj[7]='S';mj[2]='T'; mj[11]='U';mj[23]='V';mj[13]='W';mj[24]='X';mj[28]='Y'; mj[18]='Z'; mj[61]='1';mj[59]='2';mj[55]='3';mj[47]='4';mj[31]='5'; mj[32]='6';mj[34]='7';mj[38]='8';mj[46]='9';mj[62]='0'; mj[105]='.';mj[114]=',';mj[75]='?';mj[48]='=';mj[96]='-'; mj[70]=':';mj[93]='\'';mj[44]='(';mj[108]=')';mj[40]='/'; mj[85]='@'; //mj[41]='+'; for(i=0;i<121;i++){ mjj[i]=' '; } mjj[58]=0xb1;mjj[5]=0xb2;mjj[11]=0xb3;mjj[60]=0xb4;mjj[33]=0xb5;//a mjj[17]=0xb6;mjj[36]=0xb7;mjj[23]=0xb8;mjj[28]=0xb9;mjj[30]=0xba;//ka mjj[52]=0xbb;mjj[42]=0xbc;mjj[54]=0xbd;mjj[45]=0xbe;mjj[22]=0xbf;//sa mjj[4]=0xc0;mjj[19]=0xc1;mjj[21]=0xc2;mjj[57]=0xc3;mjj[35]=0xc4;//ta mjj[9]=0xc5;mjj[20]=0xc6;mjj[15]=0xc7;mjj[26]=0xc8;mjj[27]=0xc9;//na mjj[16]=0xca;mjj[50]=0xcb;mjj[18]=0xcc;mjj[1]=0xcd;mjj[8]=0xce;//ha mjj[24]=0xcf;mjj[51]=0xd0;mjj[2]=0xd1;mjj[48]=0xd2;mjj[40]=0xd3;//ma mjj[13]=0xd4;mjj[56]=0xd5;mjj[6]=0xd6;//ya mjj[7]=0xd7;mjj[10]=0xd8;mjj[44]=0xd9;mjj[14]=0xda;mjj[25]=0xdb;//ra mjj[12]=0xdc;mjj[49]=0xb2;mjj[37]=0xb4;mjj[29]=0xa6;mjj[41]=0xdd;//wa mjj[53]=0xb0;mjj[43]=0xdf;mjj[105]=','; mjj[3]=0xde;mjj[73]=0xa3; mjj[108]='(';mjj[81]=')'; mjj[61]='1';mjj[59]='2';mjj[55]='3';mjj[47]='4';mjj[31]='5'; mjj[32]='6';mjj[34]='7';mjj[38]='8';mjj[46]='9';mjj[62]='0'; lcd.cls(); lcd.printf("*CW12 "); for(i=0;i<8;i++){ code[i]=0; } i=0; tan_sum=0; set_speed(); c1=' ',c2=' '; while( i<5 ){//initialize lcd.locate(8,0); lcd.printf("%2d",5-i); scount=0; while(CW==XLOW){ } mled1=ON; while(CW==XHI){ scount++; wait_ms(1); } mled1=OFF; if(min_ms < scount && scount < max_ms){ tan_sum=tan_sum+scount; i++; } }//while i tanten=tan_sum/5; j=0; k=0; tan_sum=0; gyou=1,retu=0; gengo=OUBUN; wabun_temp=OUBUN; while(1){ set_speed(); if(GENGO_MODE==MANUAL){// Manual mode lcd_manual(); if(GENGO_SELECT==OUBUN){ gengo=OUBUN; } else if(GENGO_SELECT==WABUN){ gengo=WABUN; wabun_temp=WABUN; } } else if(GENGO_MODE==AUTO){// Auto mode lcd_auto(); } while(CW==XLOW){ } scount=0; mled1=ON; while(CW==XHI){ wait_ms(1); scount++; } mled1=OFF; if(min_ms < scount && scount < max_ms){ //lcd.printf("."); code[k]=1; k++; tan_sum=tan_sum+scount; j++; } else if ( scount > tanten*2.0){ //lcd.printf("_"); code[k]=2; k++; tan_sum=tan_sum+scount/3; j++; } lcd.locate(8,0); lcd.printf("%2d",k); scount=0; while(CW==XLOW){ wait_ms(1); scount++; if(scount > tanten*10){ break; } } if(k>8){ k=0; lcd_scprintf('*'); for(i=0;i<=7;i++){ code[i]=0; } } if(gengo==OUBUN && scount > tanten*2.0){ lcd_alpha(); cw_sum=0; for(i=0;i<=7;i++){ cw_sum=cw_sum+code[i]*int(pow(2.0,i)); } if(GENGO_MODE==AUTO && cw_sum==HORE ){// hore lcd_scprintf('[');lcd_scprintf(0xce);lcd_scprintf( 0xda);lcd_scprintf(']');//ho re if(c1=='C' && c2=='Q'){ // } else{ gengo=WABUN; wabun_temp=WABUN; cw_sum=0; } } else if(cw_sum==BT){ lcd_scprintf('[');lcd_scprintf('B');lcd_scprintf('T');lcd_scprintf(']'); } else if(cw_sum==KN){ lcd_scprintf('[');lcd_scprintf('K');lcd_scprintf('N');lcd_scprintf(']'); } else if(cw_sum==AR){ lcd_scprintf('[');lcd_scprintf('A');lcd_scprintf('R');lcd_scprintf(']'); } else if(cw_sum==HH){ lcd_scprintf('[');lcd_scprintf('H');lcd_scprintf('H');lcd_scprintf(']'); } else if(cw_sum==AS){ lcd_scprintf('[');lcd_scprintf('A');lcd_scprintf('S');lcd_scprintf(']'); } else if(cw_sum==CT){ lcd_scprintf('[');lcd_scprintf('C');lcd_scprintf('T');lcd_scprintf(']'); } else if(cw_sum==VA){ lcd_scprintf('[');lcd_scprintf('V');lcd_scprintf('A');lcd_scprintf(']'); } else if(cw_sum > 115){ lcd_scprintf('*'); cw_sum=0; } else { lcd_scprintf(mj[cw_sum]); c1=c2; c2=mj[cw_sum]; } k=0; for(i=0;i<=7;i++){ code[i]=0; } }//if oubun if(gengo==WABUN && scount > tanten*2.0){ lcd_kana(); cw_sum=0; for(i=0;i<=7;i++){ cw_sum=cw_sum+code[i]*int(pow(2.0,i)); } if(GENGO_MODE==AUTO && cw_sum==39){// ra ta lcd_scprintf('[');lcd_scprintf(0xd7);lcd_scprintf(0xc0);lcd_scprintf(']');//ra ta gengo=OUBUN; wabun_temp=OUBUN; } if(cw_sum==81){// ) wabun_temp=WABUN; lcd_kana(); } else if(cw_sum > 121){ cw_sum=0; lcd_scprintf(' '); } if(wabun_temp==WABUN){ lcd_scprintf(mjj[cw_sum]); c1=c2; c2=mjj[cw_sum]; } else if(wabun_temp==OUBUN){ lcd_scprintf(mj[cw_sum]); c1=c2; c2=mj[cw_sum]; } if(cw_sum==108){// ( wabun_temp=OUBUN; lcd_alpha(); } k=0; for(i=0;i<=7;i++){ code[i]=0; } }//if wabun if(scount > tanten*7){ lcd_scprintf(' '); } if(j==10){ tanten=tan_sum/10; cpm=60000/(tanten*57)*5; tan_sum=0; j=0; if(cpm > 100){ cw_class='P'; } else if(cpm > 90){ cw_class='S'; } else if(cpm > 65){ cw_class='1'; } else if(cpm > 40){ cw_class='2'; } else if(cpm > 30){ cw_class='3'; } lcd.locate(11,0); lcd.printf("%3dc(%c)",cpm,cw_class); //lcd.printf("%3dc,%3dm",cpm,tanten); } }//while 1 }//main