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

Dependencies:   mbed

Committer:
takeuchi
Date:
Sun Jul 15 04:06:48 2012 +0000
Revision:
0:eb69dcfe8114
???????web mbed?? mbed CW??????4????-?????0?9?????A~Z???????????????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
takeuchi 0:eb69dcfe8114 1 // CW05
takeuchi 0:eb69dcfe8114 2 // auto speed
takeuchi 0:eb69dcfe8114 3 #include "mbed.h"
takeuchi 0:eb69dcfe8114 4 #include "TextLCD0420.h"
takeuchi 0:eb69dcfe8114 5
takeuchi 0:eb69dcfe8114 6 #define ON 1
takeuchi 0:eb69dcfe8114 7 #define OFF 0
takeuchi 0:eb69dcfe8114 8 #define XON 0
takeuchi 0:eb69dcfe8114 9 #define XOFF 1
takeuchi 0:eb69dcfe8114 10 #define XHI 0
takeuchi 0:eb69dcfe8114 11 #define XLOW 1
takeuchi 0:eb69dcfe8114 12 #define HI 1
takeuchi 0:eb69dcfe8114 13 #define LOW 0
takeuchi 0:eb69dcfe8114 14 #define OUBUN 1
takeuchi 0:eb69dcfe8114 15 #define WABUN 0
takeuchi 0:eb69dcfe8114 16
takeuchi 0:eb69dcfe8114 17 DigitalOut mled1(LED1);
takeuchi 0:eb69dcfe8114 18 DigitalOut mled2(LED2);
takeuchi 0:eb69dcfe8114 19 DigitalOut mled3(LED3);
takeuchi 0:eb69dcfe8114 20 DigitalOut mled4(LED4);
takeuchi 0:eb69dcfe8114 21 DigitalIn CW(p5);
takeuchi 0:eb69dcfe8114 22 DigitalIn SP_SELECT(p6);
takeuchi 0:eb69dcfe8114 23 DigitalIn GENGO_MODE(p7);
takeuchi 0:eb69dcfe8114 24 DigitalIn GENGO_SELECT(p8);
takeuchi 0:eb69dcfe8114 25
takeuchi 0:eb69dcfe8114 26 TextLCD lcd(p24, p25, p26, p27, p28, p29, p30,20,4); // rs, rw, e, d0, d1, d2, d3
takeuchi 0:eb69dcfe8114 27
takeuchi 0:eb69dcfe8114 28 int retu,gyou;
takeuchi 0:eb69dcfe8114 29 char g2[20],g3[20];
takeuchi 0:eb69dcfe8114 30 int init_flag=ON;
takeuchi 0:eb69dcfe8114 31 int min_ms,max_ms;
takeuchi 0:eb69dcfe8114 32
takeuchi 0:eb69dcfe8114 33 void set_speed(){
takeuchi 0:eb69dcfe8114 34 if(SP_SELECT==HI){
takeuchi 0:eb69dcfe8114 35 min_ms=30;
takeuchi 0:eb69dcfe8114 36 max_ms=90;
takeuchi 0:eb69dcfe8114 37 lcd.locate(5,0);
takeuchi 0:eb69dcfe8114 38 lcd.printf("H");
takeuchi 0:eb69dcfe8114 39 }
takeuchi 0:eb69dcfe8114 40 else if(SP_SELECT==LOW){
takeuchi 0:eb69dcfe8114 41 min_ms=70;
takeuchi 0:eb69dcfe8114 42 max_ms=210;
takeuchi 0:eb69dcfe8114 43 lcd.locate(5,0);
takeuchi 0:eb69dcfe8114 44 lcd.printf("L");
takeuchi 0:eb69dcfe8114 45 }
takeuchi 0:eb69dcfe8114 46 }
takeuchi 0:eb69dcfe8114 47
takeuchi 0:eb69dcfe8114 48 int main() {
takeuchi 0:eb69dcfe8114 49
takeuchi 0:eb69dcfe8114 50 int i,j,k;
takeuchi 0:eb69dcfe8114 51 int code[20];
takeuchi 0:eb69dcfe8114 52 int scount;
takeuchi 0:eb69dcfe8114 53 char mj[115];
takeuchi 0:eb69dcfe8114 54 int cw_sum,tan_sum,tanten;
takeuchi 0:eb69dcfe8114 55
takeuchi 0:eb69dcfe8114 56 for(i=0;i<115;i++){
takeuchi 0:eb69dcfe8114 57 mj[i]=' ';
takeuchi 0:eb69dcfe8114 58 }
takeuchi 0:eb69dcfe8114 59 mj[5]='A';mj[16]='B';mj[20]='C';mj[8]='D';mj[1]='E';
takeuchi 0:eb69dcfe8114 60 mj[19]='F';mj[10]='G';mj[15]='H';mj[3]='I';mj[29]='J';
takeuchi 0:eb69dcfe8114 61 mj[12]='K';mj[17]='L';mj[6]='M';mj[4]='N';mj[14]='O';
takeuchi 0:eb69dcfe8114 62 mj[21]='P';mj[26]='Q';mj[9]='R';mj[7]='S';mj[2]='T';
takeuchi 0:eb69dcfe8114 63 mj[11]='U';mj[23]='V';mj[13]='W';mj[24]='X';mj[28]='Y';
takeuchi 0:eb69dcfe8114 64 mj[18]='Z';
takeuchi 0:eb69dcfe8114 65 mj[61]='1';mj[59]='2';mj[55]='3';mj[47]='4';mj[31]='5';
takeuchi 0:eb69dcfe8114 66 mj[32]='6';mj[34]='7';mj[38]='8';mj[46]='9';mj[62]='0';
takeuchi 0:eb69dcfe8114 67 mj[105]='.';mj[114]=',';mj[75]='?';mj[48]='=';mj[96]='-';
takeuchi 0:eb69dcfe8114 68 mj[70]=':';mj[93]='\'';mj[44]='(';mj[108]=')';mj[41]='+';
takeuchi 0:eb69dcfe8114 69 mj[81]='"';
takeuchi 0:eb69dcfe8114 70
takeuchi 0:eb69dcfe8114 71 lcd.cls();
takeuchi 0:eb69dcfe8114 72 lcd.printf("*CW05 ");
takeuchi 0:eb69dcfe8114 73
takeuchi 0:eb69dcfe8114 74 for(i=0;i<6;i++){
takeuchi 0:eb69dcfe8114 75 code[i]=0;
takeuchi 0:eb69dcfe8114 76 }
takeuchi 0:eb69dcfe8114 77
takeuchi 0:eb69dcfe8114 78 i=0;
takeuchi 0:eb69dcfe8114 79 tan_sum=0;
takeuchi 0:eb69dcfe8114 80 set_speed();
takeuchi 0:eb69dcfe8114 81
takeuchi 0:eb69dcfe8114 82 while( i<5 ){
takeuchi 0:eb69dcfe8114 83 lcd.locate(7,0);
takeuchi 0:eb69dcfe8114 84 lcd.printf("%2d",5-i);
takeuchi 0:eb69dcfe8114 85 scount=0;
takeuchi 0:eb69dcfe8114 86 while(CW==XLOW){
takeuchi 0:eb69dcfe8114 87 }
takeuchi 0:eb69dcfe8114 88 mled1=ON;
takeuchi 0:eb69dcfe8114 89 while(CW==XHI){
takeuchi 0:eb69dcfe8114 90 scount++;
takeuchi 0:eb69dcfe8114 91 wait_ms(1);
takeuchi 0:eb69dcfe8114 92 }
takeuchi 0:eb69dcfe8114 93 mled1=OFF;
takeuchi 0:eb69dcfe8114 94 if(min_ms < scount && scount < max_ms){
takeuchi 0:eb69dcfe8114 95 tan_sum=tan_sum+scount;
takeuchi 0:eb69dcfe8114 96 i++;
takeuchi 0:eb69dcfe8114 97 }
takeuchi 0:eb69dcfe8114 98
takeuchi 0:eb69dcfe8114 99 }
takeuchi 0:eb69dcfe8114 100 tanten=tan_sum/5;
takeuchi 0:eb69dcfe8114 101 lcd.locate(0,1);
takeuchi 0:eb69dcfe8114 102 lcd.printf("%3d ",tanten);
takeuchi 0:eb69dcfe8114 103
takeuchi 0:eb69dcfe8114 104 j=0;
takeuchi 0:eb69dcfe8114 105 tan_sum=0;
takeuchi 0:eb69dcfe8114 106 k=0;
takeuchi 0:eb69dcfe8114 107
takeuchi 0:eb69dcfe8114 108 while(1){
takeuchi 0:eb69dcfe8114 109 while(CW==XLOW){
takeuchi 0:eb69dcfe8114 110 }
takeuchi 0:eb69dcfe8114 111
takeuchi 0:eb69dcfe8114 112 scount=0;
takeuchi 0:eb69dcfe8114 113 mled1=ON;
takeuchi 0:eb69dcfe8114 114 while(CW==XHI){
takeuchi 0:eb69dcfe8114 115 wait_ms(1);
takeuchi 0:eb69dcfe8114 116 scount++;
takeuchi 0:eb69dcfe8114 117 }
takeuchi 0:eb69dcfe8114 118 mled1=OFF;
takeuchi 0:eb69dcfe8114 119
takeuchi 0:eb69dcfe8114 120 if(min_ms < scount && scount < max_ms){
takeuchi 0:eb69dcfe8114 121 //lcd.printf(".");
takeuchi 0:eb69dcfe8114 122 code[k]=1;
takeuchi 0:eb69dcfe8114 123 k++;
takeuchi 0:eb69dcfe8114 124 tan_sum=tan_sum+scount;
takeuchi 0:eb69dcfe8114 125 j++;
takeuchi 0:eb69dcfe8114 126 }
takeuchi 0:eb69dcfe8114 127
takeuchi 0:eb69dcfe8114 128 else if ( scount > tanten*2.0){
takeuchi 0:eb69dcfe8114 129 //lcd.printf("_");
takeuchi 0:eb69dcfe8114 130 code[k]=2;
takeuchi 0:eb69dcfe8114 131 k++;
takeuchi 0:eb69dcfe8114 132 tan_sum=tan_sum+scount/3;
takeuchi 0:eb69dcfe8114 133 j++;
takeuchi 0:eb69dcfe8114 134 }
takeuchi 0:eb69dcfe8114 135
takeuchi 0:eb69dcfe8114 136 scount=0;
takeuchi 0:eb69dcfe8114 137 while(CW==XLOW){
takeuchi 0:eb69dcfe8114 138 wait_ms(1);
takeuchi 0:eb69dcfe8114 139 scount++;
takeuchi 0:eb69dcfe8114 140 if(scount > tanten*10){
takeuchi 0:eb69dcfe8114 141 break;
takeuchi 0:eb69dcfe8114 142 }
takeuchi 0:eb69dcfe8114 143 }
takeuchi 0:eb69dcfe8114 144
takeuchi 0:eb69dcfe8114 145 if(k>=6){
takeuchi 0:eb69dcfe8114 146 k=0;
takeuchi 0:eb69dcfe8114 147 lcd.printf("*");
takeuchi 0:eb69dcfe8114 148 for(i=0;i<6;i++){
takeuchi 0:eb69dcfe8114 149 code[i]=0;
takeuchi 0:eb69dcfe8114 150 }
takeuchi 0:eb69dcfe8114 151 }
takeuchi 0:eb69dcfe8114 152
takeuchi 0:eb69dcfe8114 153 if(scount > tanten*2.0){
takeuchi 0:eb69dcfe8114 154 cw_sum=0;
takeuchi 0:eb69dcfe8114 155 for(i=0;i<6;i++){
takeuchi 0:eb69dcfe8114 156 cw_sum=cw_sum+code[i]*int(pow(2.0,i));
takeuchi 0:eb69dcfe8114 157 }
takeuchi 0:eb69dcfe8114 158 lcd.printf("%c",mj[cw_sum]);
takeuchi 0:eb69dcfe8114 159 k=0;
takeuchi 0:eb69dcfe8114 160 for(i=0;i<6;i++){
takeuchi 0:eb69dcfe8114 161 code[i]=0;
takeuchi 0:eb69dcfe8114 162 }
takeuchi 0:eb69dcfe8114 163 }//if
takeuchi 0:eb69dcfe8114 164
takeuchi 0:eb69dcfe8114 165 if(scount > tanten*7){
takeuchi 0:eb69dcfe8114 166 lcd.printf(" ");
takeuchi 0:eb69dcfe8114 167 }
takeuchi 0:eb69dcfe8114 168
takeuchi 0:eb69dcfe8114 169 if(j==10){
takeuchi 0:eb69dcfe8114 170 tanten=tan_sum/10;
takeuchi 0:eb69dcfe8114 171 tan_sum=0;
takeuchi 0:eb69dcfe8114 172 j=0;
takeuchi 0:eb69dcfe8114 173 lcd.printf("%3d ",tanten);
takeuchi 0:eb69dcfe8114 174 }
takeuchi 0:eb69dcfe8114 175 }//while 1
takeuchi 0:eb69dcfe8114 176 }//main