Takeuchi Kouichi
/
2ck0626_mbed CW08
エレキジャックweb mbed入門 mbed CWデコーダ課題8です。数字とアルファベットに加えて、BT・ARなどの通信記号に対応しました。デコーダ基板が必要です
main.cpp
- Committer:
- takeuchi
- Date:
- 2012-07-16
- Revision:
- 0:e516dfe942bc
File content as of revision 0:e516dfe942bc:
// CW08 // BT AR 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 KN 44 #define AS 33 #define CT 52 #define BT 48 #define AR 41 #define HH 255 #define VA 103 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"); } } int main() { int i,j,k; int code[8]; int scount; char mj[115]; int cw_sum,tan_sum,tanten,cpm; int gengo,gengo_auto; 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]='+'; lcd.cls(); lcd.printf("*CW08 "); for(i=0;i<8;i++){ code[i]=0; } i=0; tan_sum=0; set_speed(); while( i<5 ){ lcd.locate(7,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; tan_sum=0; k=0; gyou=1,retu=0; while(1){ set_speed(); 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(7,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(scount > tanten*2.0){ cw_sum=0; for(i=0;i<=7;i++){ cw_sum=cw_sum+code[i]*int(pow(2.0,i)); } 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 { lcd_scprintf(mj[cw_sum]); } k=0; for(i=0;i<=7;i++){ code[i]=0; } }//if 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(10,0); lcd.printf("%3dc(%c)",cpm,cw_class); //lcd.printf("%3dc,%3dm",cpm,tanten); } }//while 1 }//main