Takeuchi Kouichi
/
2ck0625_mbed CW05
エレキジャックweb mbed入門 mbed CWデコーダ課題5です。数字とアルファベットを解読します。・-の長さを計測し、速度変化に自動追従します。デコーダ基板が必要です。
main.cpp@0:eb69dcfe8114, 2012-07-15 (annotated)
- 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?
User | Revision | Line number | New 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 |