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

Dependencies:   mbed

Revision:
0:eb69dcfe8114
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Jul 15 04:06:48 2012 +0000
@@ -0,0 +1,176 @@
+// CW05
+// auto speed
+#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
+
+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 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[20];
+  int scount;
+  char mj[115];
+  int cw_sum,tan_sum,tanten;
+  
+  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[41]='+';
+  mj[81]='"'; 
+  
+  lcd.cls();
+  lcd.printf("*CW05 ");
+  
+  for(i=0;i<6;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++;
+    }
+    
+  }  
+  tanten=tan_sum/5;
+  lcd.locate(0,1);
+  lcd.printf("%3d ",tanten);    
+  
+  j=0;
+  tan_sum=0;
+  k=0;
+  
+  while(1){
+        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++;
+        }        
+                 
+        scount=0;
+        while(CW==XLOW){
+          wait_ms(1);
+          scount++;
+          if(scount > tanten*10){
+            break;
+          }
+        }
+        
+        if(k>=6){
+          k=0;
+          lcd.printf("*");
+          for(i=0;i<6;i++){
+            code[i]=0;
+          }
+        }
+        
+        if(scount > tanten*2.0){      
+          cw_sum=0;
+          for(i=0;i<6;i++){
+              cw_sum=cw_sum+code[i]*int(pow(2.0,i));
+          }
+          lcd.printf("%c",mj[cw_sum]);
+          k=0;
+          for(i=0;i<6;i++){
+            code[i]=0;
+          }
+        }//if
+        
+        if(scount > tanten*7){
+          lcd.printf(" ");
+        }
+        
+        if(j==10){
+          tanten=tan_sum/10;
+          tan_sum=0;
+          j=0;
+          lcd.printf("%3d ",tanten);
+        }
+  }//while 1
+}//main