エレキジャックweb mbed入門 mbed CWデコーダ課題5です。数字とアルファベットを解読します。・-の長さを計測し、速度変化に自動追従します。デコーダ基板が必要です。

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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