Takeuchi Kouichi
/
2ck0625_mbed CW05
エレキジャックweb mbed入門 mbed CWデコーダ課題5です。数字とアルファベットを解読します。・-の長さを計測し、速度変化に自動追従します。デコーダ基板が必要です。
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 // CW05 00002 // auto speed 00003 #include "mbed.h" 00004 #include "TextLCD0420.h" 00005 00006 #define ON 1 00007 #define OFF 0 00008 #define XON 0 00009 #define XOFF 1 00010 #define XHI 0 00011 #define XLOW 1 00012 #define HI 1 00013 #define LOW 0 00014 #define OUBUN 1 00015 #define WABUN 0 00016 00017 DigitalOut mled1(LED1); 00018 DigitalOut mled2(LED2); 00019 DigitalOut mled3(LED3); 00020 DigitalOut mled4(LED4); 00021 DigitalIn CW(p5); 00022 DigitalIn SP_SELECT(p6); 00023 DigitalIn GENGO_MODE(p7); 00024 DigitalIn GENGO_SELECT(p8); 00025 00026 TextLCD lcd(p24, p25, p26, p27, p28, p29, p30,20,4); // rs, rw, e, d0, d1, d2, d3 00027 00028 int retu,gyou; 00029 char g2[20],g3[20]; 00030 int init_flag=ON; 00031 int min_ms,max_ms; 00032 00033 void set_speed(){ 00034 if(SP_SELECT==HI){ 00035 min_ms=30; 00036 max_ms=90; 00037 lcd.locate(5,0); 00038 lcd.printf("H"); 00039 } 00040 else if(SP_SELECT==LOW){ 00041 min_ms=70; 00042 max_ms=210; 00043 lcd.locate(5,0); 00044 lcd.printf("L"); 00045 } 00046 } 00047 00048 int main() { 00049 00050 int i,j,k; 00051 int code[20]; 00052 int scount; 00053 char mj[115]; 00054 int cw_sum,tan_sum,tanten; 00055 00056 for(i=0;i<115;i++){ 00057 mj[i]=' '; 00058 } 00059 mj[5]='A';mj[16]='B';mj[20]='C';mj[8]='D';mj[1]='E'; 00060 mj[19]='F';mj[10]='G';mj[15]='H';mj[3]='I';mj[29]='J'; 00061 mj[12]='K';mj[17]='L';mj[6]='M';mj[4]='N';mj[14]='O'; 00062 mj[21]='P';mj[26]='Q';mj[9]='R';mj[7]='S';mj[2]='T'; 00063 mj[11]='U';mj[23]='V';mj[13]='W';mj[24]='X';mj[28]='Y'; 00064 mj[18]='Z'; 00065 mj[61]='1';mj[59]='2';mj[55]='3';mj[47]='4';mj[31]='5'; 00066 mj[32]='6';mj[34]='7';mj[38]='8';mj[46]='9';mj[62]='0'; 00067 mj[105]='.';mj[114]=',';mj[75]='?';mj[48]='=';mj[96]='-'; 00068 mj[70]=':';mj[93]='\'';mj[44]='(';mj[108]=')';mj[41]='+'; 00069 mj[81]='"'; 00070 00071 lcd.cls(); 00072 lcd.printf("*CW05 "); 00073 00074 for(i=0;i<6;i++){ 00075 code[i]=0; 00076 } 00077 00078 i=0; 00079 tan_sum=0; 00080 set_speed(); 00081 00082 while( i<5 ){ 00083 lcd.locate(7,0); 00084 lcd.printf("%2d",5-i); 00085 scount=0; 00086 while(CW==XLOW){ 00087 } 00088 mled1=ON; 00089 while(CW==XHI){ 00090 scount++; 00091 wait_ms(1); 00092 } 00093 mled1=OFF; 00094 if(min_ms < scount && scount < max_ms){ 00095 tan_sum=tan_sum+scount; 00096 i++; 00097 } 00098 00099 } 00100 tanten=tan_sum/5; 00101 lcd.locate(0,1); 00102 lcd.printf("%3d ",tanten); 00103 00104 j=0; 00105 tan_sum=0; 00106 k=0; 00107 00108 while(1){ 00109 while(CW==XLOW){ 00110 } 00111 00112 scount=0; 00113 mled1=ON; 00114 while(CW==XHI){ 00115 wait_ms(1); 00116 scount++; 00117 } 00118 mled1=OFF; 00119 00120 if(min_ms < scount && scount < max_ms){ 00121 //lcd.printf("."); 00122 code[k]=1; 00123 k++; 00124 tan_sum=tan_sum+scount; 00125 j++; 00126 } 00127 00128 else if ( scount > tanten*2.0){ 00129 //lcd.printf("_"); 00130 code[k]=2; 00131 k++; 00132 tan_sum=tan_sum+scount/3; 00133 j++; 00134 } 00135 00136 scount=0; 00137 while(CW==XLOW){ 00138 wait_ms(1); 00139 scount++; 00140 if(scount > tanten*10){ 00141 break; 00142 } 00143 } 00144 00145 if(k>=6){ 00146 k=0; 00147 lcd.printf("*"); 00148 for(i=0;i<6;i++){ 00149 code[i]=0; 00150 } 00151 } 00152 00153 if(scount > tanten*2.0){ 00154 cw_sum=0; 00155 for(i=0;i<6;i++){ 00156 cw_sum=cw_sum+code[i]*int(pow(2.0,i)); 00157 } 00158 lcd.printf("%c",mj[cw_sum]); 00159 k=0; 00160 for(i=0;i<6;i++){ 00161 code[i]=0; 00162 } 00163 }//if 00164 00165 if(scount > tanten*7){ 00166 lcd.printf(" "); 00167 } 00168 00169 if(j==10){ 00170 tanten=tan_sum/10; 00171 tan_sum=0; 00172 j=0; 00173 lcd.printf("%3d ",tanten); 00174 } 00175 }//while 1 00176 }//main
Generated on Thu Jul 21 2022 03:05:48 by 1.7.2