Takeuchi Kouichi
/
2ck0626_mbed CW08
エレキジャックweb mbed入門 mbed CWデコーダ課題8です。数字とアルファベットに加えて、BT・ARなどの通信記号に対応しました。デコーダ基板が必要です
main.cpp@0:e516dfe942bc, 2012-07-16 (annotated)
- Committer:
- takeuchi
- Date:
- Mon Jul 16 01:08:27 2012 +0000
- Revision:
- 0:e516dfe942bc
???????web mbed?? mbed CW??????7??????????????????1?????????????????????????????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
takeuchi | 0:e516dfe942bc | 1 | // CW08 |
takeuchi | 0:e516dfe942bc | 2 | // BT AR taiou |
takeuchi | 0:e516dfe942bc | 3 | #include "mbed.h" |
takeuchi | 0:e516dfe942bc | 4 | #include "TextLCD0420.h" |
takeuchi | 0:e516dfe942bc | 5 | |
takeuchi | 0:e516dfe942bc | 6 | #define ON 1 |
takeuchi | 0:e516dfe942bc | 7 | #define OFF 0 |
takeuchi | 0:e516dfe942bc | 8 | #define XON 0 |
takeuchi | 0:e516dfe942bc | 9 | #define XOFF 1 |
takeuchi | 0:e516dfe942bc | 10 | #define XHI 0 |
takeuchi | 0:e516dfe942bc | 11 | #define XLOW 1 |
takeuchi | 0:e516dfe942bc | 12 | #define HI 1 |
takeuchi | 0:e516dfe942bc | 13 | #define LOW 0 |
takeuchi | 0:e516dfe942bc | 14 | #define OUBUN 1 |
takeuchi | 0:e516dfe942bc | 15 | #define WABUN 0 |
takeuchi | 0:e516dfe942bc | 16 | #define KN 44 |
takeuchi | 0:e516dfe942bc | 17 | #define AS 33 |
takeuchi | 0:e516dfe942bc | 18 | #define CT 52 |
takeuchi | 0:e516dfe942bc | 19 | #define BT 48 |
takeuchi | 0:e516dfe942bc | 20 | #define AR 41 |
takeuchi | 0:e516dfe942bc | 21 | #define HH 255 |
takeuchi | 0:e516dfe942bc | 22 | #define VA 103 |
takeuchi | 0:e516dfe942bc | 23 | |
takeuchi | 0:e516dfe942bc | 24 | DigitalOut mled1(LED1); |
takeuchi | 0:e516dfe942bc | 25 | DigitalOut mled2(LED2); |
takeuchi | 0:e516dfe942bc | 26 | DigitalOut mled3(LED3); |
takeuchi | 0:e516dfe942bc | 27 | DigitalOut mled4(LED4); |
takeuchi | 0:e516dfe942bc | 28 | DigitalIn CW(p5); |
takeuchi | 0:e516dfe942bc | 29 | DigitalIn SP_SELECT(p6); |
takeuchi | 0:e516dfe942bc | 30 | DigitalIn GENGO_MODE(p7); |
takeuchi | 0:e516dfe942bc | 31 | DigitalIn GENGO_SELECT(p8); |
takeuchi | 0:e516dfe942bc | 32 | |
takeuchi | 0:e516dfe942bc | 33 | TextLCD lcd(p24, p25, p26, p27, p28, p29, p30,20,4); // rs, rw, e, d0, d1, d2, d3 |
takeuchi | 0:e516dfe942bc | 34 | |
takeuchi | 0:e516dfe942bc | 35 | int retu,gyou; |
takeuchi | 0:e516dfe942bc | 36 | char g2[20],g3[20]; |
takeuchi | 0:e516dfe942bc | 37 | int init_flag=ON; |
takeuchi | 0:e516dfe942bc | 38 | int min_ms,max_ms; |
takeuchi | 0:e516dfe942bc | 39 | |
takeuchi | 0:e516dfe942bc | 40 | void lcd_scprintf(char pdata){ |
takeuchi | 0:e516dfe942bc | 41 | int i; |
takeuchi | 0:e516dfe942bc | 42 | |
takeuchi | 0:e516dfe942bc | 43 | if(init_flag==ON){ |
takeuchi | 0:e516dfe942bc | 44 | if(gyou==1){ |
takeuchi | 0:e516dfe942bc | 45 | lcd.locate(retu,1); |
takeuchi | 0:e516dfe942bc | 46 | lcd.printf("%c",pdata); |
takeuchi | 0:e516dfe942bc | 47 | retu++; |
takeuchi | 0:e516dfe942bc | 48 | if(retu==20){ |
takeuchi | 0:e516dfe942bc | 49 | gyou=2; |
takeuchi | 0:e516dfe942bc | 50 | retu=0; |
takeuchi | 0:e516dfe942bc | 51 | } |
takeuchi | 0:e516dfe942bc | 52 | } |
takeuchi | 0:e516dfe942bc | 53 | else if(gyou==2){ |
takeuchi | 0:e516dfe942bc | 54 | lcd.locate(retu,2); |
takeuchi | 0:e516dfe942bc | 55 | lcd.printf("%c",pdata); |
takeuchi | 0:e516dfe942bc | 56 | g2[retu]=pdata; |
takeuchi | 0:e516dfe942bc | 57 | retu++; |
takeuchi | 0:e516dfe942bc | 58 | if(retu==20){ |
takeuchi | 0:e516dfe942bc | 59 | retu=0; |
takeuchi | 0:e516dfe942bc | 60 | gyou=3; |
takeuchi | 0:e516dfe942bc | 61 | } |
takeuchi | 0:e516dfe942bc | 62 | } |
takeuchi | 0:e516dfe942bc | 63 | else if(gyou==3){ |
takeuchi | 0:e516dfe942bc | 64 | lcd.locate(retu,3); |
takeuchi | 0:e516dfe942bc | 65 | lcd.printf("%c",pdata); |
takeuchi | 0:e516dfe942bc | 66 | g3[retu]=pdata; |
takeuchi | 0:e516dfe942bc | 67 | retu++; |
takeuchi | 0:e516dfe942bc | 68 | if(retu==20){ |
takeuchi | 0:e516dfe942bc | 69 | retu=0; |
takeuchi | 0:e516dfe942bc | 70 | gyou=1; |
takeuchi | 0:e516dfe942bc | 71 | for(i=0;i<20;i++){ |
takeuchi | 0:e516dfe942bc | 72 | lcd.locate(i,1); |
takeuchi | 0:e516dfe942bc | 73 | lcd.printf("%c",g2[i]); |
takeuchi | 0:e516dfe942bc | 74 | } |
takeuchi | 0:e516dfe942bc | 75 | for(i=0;i<20;i++){ |
takeuchi | 0:e516dfe942bc | 76 | lcd.locate(i,2); |
takeuchi | 0:e516dfe942bc | 77 | lcd.printf("%c",g3[i]); |
takeuchi | 0:e516dfe942bc | 78 | g2[i]=g3[i]; |
takeuchi | 0:e516dfe942bc | 79 | } |
takeuchi | 0:e516dfe942bc | 80 | lcd.locate(0,3); |
takeuchi | 0:e516dfe942bc | 81 | lcd.printf(" "); |
takeuchi | 0:e516dfe942bc | 82 | init_flag=OFF; |
takeuchi | 0:e516dfe942bc | 83 | } |
takeuchi | 0:e516dfe942bc | 84 | } |
takeuchi | 0:e516dfe942bc | 85 | } |
takeuchi | 0:e516dfe942bc | 86 | if(init_flag==OFF){ |
takeuchi | 0:e516dfe942bc | 87 | gyou=3; |
takeuchi | 0:e516dfe942bc | 88 | lcd.locate(retu,3); |
takeuchi | 0:e516dfe942bc | 89 | lcd.printf("%c",pdata); |
takeuchi | 0:e516dfe942bc | 90 | g3[retu]=pdata; |
takeuchi | 0:e516dfe942bc | 91 | retu++; |
takeuchi | 0:e516dfe942bc | 92 | if(retu==20){ |
takeuchi | 0:e516dfe942bc | 93 | for(i=0;i<20;i++){ |
takeuchi | 0:e516dfe942bc | 94 | lcd.locate(i,1); |
takeuchi | 0:e516dfe942bc | 95 | lcd.printf("%c",g2[i]); |
takeuchi | 0:e516dfe942bc | 96 | lcd.locate(i,2); |
takeuchi | 0:e516dfe942bc | 97 | lcd.printf("%c",g3[i]); |
takeuchi | 0:e516dfe942bc | 98 | g2[i]=g3[i]; |
takeuchi | 0:e516dfe942bc | 99 | } |
takeuchi | 0:e516dfe942bc | 100 | lcd.locate(0,3); |
takeuchi | 0:e516dfe942bc | 101 | lcd.printf(" "); |
takeuchi | 0:e516dfe942bc | 102 | retu=0; |
takeuchi | 0:e516dfe942bc | 103 | } |
takeuchi | 0:e516dfe942bc | 104 | } |
takeuchi | 0:e516dfe942bc | 105 | } |
takeuchi | 0:e516dfe942bc | 106 | |
takeuchi | 0:e516dfe942bc | 107 | void set_speed(){ |
takeuchi | 0:e516dfe942bc | 108 | if(SP_SELECT==HI){ |
takeuchi | 0:e516dfe942bc | 109 | min_ms=30; |
takeuchi | 0:e516dfe942bc | 110 | max_ms=90; |
takeuchi | 0:e516dfe942bc | 111 | lcd.locate(5,0); |
takeuchi | 0:e516dfe942bc | 112 | lcd.printf("H"); |
takeuchi | 0:e516dfe942bc | 113 | } |
takeuchi | 0:e516dfe942bc | 114 | else if(SP_SELECT==LOW){ |
takeuchi | 0:e516dfe942bc | 115 | min_ms=70; |
takeuchi | 0:e516dfe942bc | 116 | max_ms=210; |
takeuchi | 0:e516dfe942bc | 117 | lcd.locate(5,0); |
takeuchi | 0:e516dfe942bc | 118 | lcd.printf("L"); |
takeuchi | 0:e516dfe942bc | 119 | } |
takeuchi | 0:e516dfe942bc | 120 | } |
takeuchi | 0:e516dfe942bc | 121 | |
takeuchi | 0:e516dfe942bc | 122 | int main() { |
takeuchi | 0:e516dfe942bc | 123 | |
takeuchi | 0:e516dfe942bc | 124 | int i,j,k; |
takeuchi | 0:e516dfe942bc | 125 | int code[8]; |
takeuchi | 0:e516dfe942bc | 126 | int scount; |
takeuchi | 0:e516dfe942bc | 127 | char mj[115]; |
takeuchi | 0:e516dfe942bc | 128 | int cw_sum,tan_sum,tanten,cpm; |
takeuchi | 0:e516dfe942bc | 129 | int gengo,gengo_auto; |
takeuchi | 0:e516dfe942bc | 130 | char cw_class; |
takeuchi | 0:e516dfe942bc | 131 | |
takeuchi | 0:e516dfe942bc | 132 | for(i=0;i<115;i++){ |
takeuchi | 0:e516dfe942bc | 133 | mj[i]=' '; |
takeuchi | 0:e516dfe942bc | 134 | } |
takeuchi | 0:e516dfe942bc | 135 | mj[5]='A';mj[16]='B';mj[20]='C';mj[8]='D';mj[1]='E'; |
takeuchi | 0:e516dfe942bc | 136 | mj[19]='F';mj[10]='G';mj[15]='H';mj[3]='I';mj[29]='J'; |
takeuchi | 0:e516dfe942bc | 137 | mj[12]='K';mj[17]='L';mj[6]='M';mj[4]='N';mj[14]='O'; |
takeuchi | 0:e516dfe942bc | 138 | mj[21]='P';mj[26]='Q';mj[9]='R';mj[7]='S';mj[2]='T'; |
takeuchi | 0:e516dfe942bc | 139 | mj[11]='U';mj[23]='V';mj[13]='W';mj[24]='X';mj[28]='Y'; |
takeuchi | 0:e516dfe942bc | 140 | mj[18]='Z'; |
takeuchi | 0:e516dfe942bc | 141 | mj[61]='1';mj[59]='2';mj[55]='3';mj[47]='4';mj[31]='5'; |
takeuchi | 0:e516dfe942bc | 142 | mj[32]='6';mj[34]='7';mj[38]='8';mj[46]='9';mj[62]='0'; |
takeuchi | 0:e516dfe942bc | 143 | mj[105]='.';mj[114]=',';mj[75]='?';mj[48]='=';mj[96]='-'; |
takeuchi | 0:e516dfe942bc | 144 | mj[70]=':';mj[93]='\'';mj[44]='(';mj[108]=')';mj[40]='/'; |
takeuchi | 0:e516dfe942bc | 145 | mj[85]='@'; |
takeuchi | 0:e516dfe942bc | 146 | //mj[41]='+'; |
takeuchi | 0:e516dfe942bc | 147 | |
takeuchi | 0:e516dfe942bc | 148 | lcd.cls(); |
takeuchi | 0:e516dfe942bc | 149 | lcd.printf("*CW08 "); |
takeuchi | 0:e516dfe942bc | 150 | |
takeuchi | 0:e516dfe942bc | 151 | for(i=0;i<8;i++){ |
takeuchi | 0:e516dfe942bc | 152 | code[i]=0; |
takeuchi | 0:e516dfe942bc | 153 | } |
takeuchi | 0:e516dfe942bc | 154 | |
takeuchi | 0:e516dfe942bc | 155 | i=0; |
takeuchi | 0:e516dfe942bc | 156 | tan_sum=0; |
takeuchi | 0:e516dfe942bc | 157 | set_speed(); |
takeuchi | 0:e516dfe942bc | 158 | |
takeuchi | 0:e516dfe942bc | 159 | while( i<5 ){ |
takeuchi | 0:e516dfe942bc | 160 | lcd.locate(7,0); |
takeuchi | 0:e516dfe942bc | 161 | lcd.printf("%2d",5-i); |
takeuchi | 0:e516dfe942bc | 162 | scount=0; |
takeuchi | 0:e516dfe942bc | 163 | while(CW==XLOW){ |
takeuchi | 0:e516dfe942bc | 164 | } |
takeuchi | 0:e516dfe942bc | 165 | mled1=ON; |
takeuchi | 0:e516dfe942bc | 166 | while(CW==XHI){ |
takeuchi | 0:e516dfe942bc | 167 | scount++; |
takeuchi | 0:e516dfe942bc | 168 | wait_ms(1); |
takeuchi | 0:e516dfe942bc | 169 | } |
takeuchi | 0:e516dfe942bc | 170 | mled1=OFF; |
takeuchi | 0:e516dfe942bc | 171 | if(min_ms < scount && scount < max_ms){ |
takeuchi | 0:e516dfe942bc | 172 | tan_sum=tan_sum+scount; |
takeuchi | 0:e516dfe942bc | 173 | i++; |
takeuchi | 0:e516dfe942bc | 174 | } |
takeuchi | 0:e516dfe942bc | 175 | |
takeuchi | 0:e516dfe942bc | 176 | }//while i |
takeuchi | 0:e516dfe942bc | 177 | |
takeuchi | 0:e516dfe942bc | 178 | tanten=tan_sum/5; |
takeuchi | 0:e516dfe942bc | 179 | |
takeuchi | 0:e516dfe942bc | 180 | j=0; |
takeuchi | 0:e516dfe942bc | 181 | tan_sum=0; |
takeuchi | 0:e516dfe942bc | 182 | k=0; |
takeuchi | 0:e516dfe942bc | 183 | gyou=1,retu=0; |
takeuchi | 0:e516dfe942bc | 184 | while(1){ |
takeuchi | 0:e516dfe942bc | 185 | set_speed(); |
takeuchi | 0:e516dfe942bc | 186 | while(CW==XLOW){ |
takeuchi | 0:e516dfe942bc | 187 | } |
takeuchi | 0:e516dfe942bc | 188 | scount=0; |
takeuchi | 0:e516dfe942bc | 189 | mled1=ON; |
takeuchi | 0:e516dfe942bc | 190 | while(CW==XHI){ |
takeuchi | 0:e516dfe942bc | 191 | wait_ms(1); |
takeuchi | 0:e516dfe942bc | 192 | scount++; |
takeuchi | 0:e516dfe942bc | 193 | } |
takeuchi | 0:e516dfe942bc | 194 | mled1=OFF; |
takeuchi | 0:e516dfe942bc | 195 | |
takeuchi | 0:e516dfe942bc | 196 | if(min_ms < scount && scount < max_ms){ |
takeuchi | 0:e516dfe942bc | 197 | //lcd.printf("."); |
takeuchi | 0:e516dfe942bc | 198 | code[k]=1; |
takeuchi | 0:e516dfe942bc | 199 | k++; |
takeuchi | 0:e516dfe942bc | 200 | tan_sum=tan_sum+scount; |
takeuchi | 0:e516dfe942bc | 201 | j++; |
takeuchi | 0:e516dfe942bc | 202 | } |
takeuchi | 0:e516dfe942bc | 203 | |
takeuchi | 0:e516dfe942bc | 204 | else if ( scount > tanten*2.0){ |
takeuchi | 0:e516dfe942bc | 205 | //lcd.printf("_"); |
takeuchi | 0:e516dfe942bc | 206 | code[k]=2; |
takeuchi | 0:e516dfe942bc | 207 | k++; |
takeuchi | 0:e516dfe942bc | 208 | tan_sum=tan_sum+scount/3; |
takeuchi | 0:e516dfe942bc | 209 | j++; |
takeuchi | 0:e516dfe942bc | 210 | } |
takeuchi | 0:e516dfe942bc | 211 | |
takeuchi | 0:e516dfe942bc | 212 | lcd.locate(7,0); |
takeuchi | 0:e516dfe942bc | 213 | lcd.printf("%2d",k); |
takeuchi | 0:e516dfe942bc | 214 | |
takeuchi | 0:e516dfe942bc | 215 | scount=0; |
takeuchi | 0:e516dfe942bc | 216 | while(CW==XLOW){ |
takeuchi | 0:e516dfe942bc | 217 | wait_ms(1); |
takeuchi | 0:e516dfe942bc | 218 | scount++; |
takeuchi | 0:e516dfe942bc | 219 | if(scount > tanten*10){ |
takeuchi | 0:e516dfe942bc | 220 | break; |
takeuchi | 0:e516dfe942bc | 221 | } |
takeuchi | 0:e516dfe942bc | 222 | } |
takeuchi | 0:e516dfe942bc | 223 | |
takeuchi | 0:e516dfe942bc | 224 | if(k>8){ |
takeuchi | 0:e516dfe942bc | 225 | k=0; |
takeuchi | 0:e516dfe942bc | 226 | lcd_scprintf('*'); |
takeuchi | 0:e516dfe942bc | 227 | for(i=0;i<=7;i++){ |
takeuchi | 0:e516dfe942bc | 228 | code[i]=0; |
takeuchi | 0:e516dfe942bc | 229 | } |
takeuchi | 0:e516dfe942bc | 230 | } |
takeuchi | 0:e516dfe942bc | 231 | |
takeuchi | 0:e516dfe942bc | 232 | if(scount > tanten*2.0){ |
takeuchi | 0:e516dfe942bc | 233 | cw_sum=0; |
takeuchi | 0:e516dfe942bc | 234 | for(i=0;i<=7;i++){ |
takeuchi | 0:e516dfe942bc | 235 | cw_sum=cw_sum+code[i]*int(pow(2.0,i)); |
takeuchi | 0:e516dfe942bc | 236 | } |
takeuchi | 0:e516dfe942bc | 237 | if(cw_sum==BT){ |
takeuchi | 0:e516dfe942bc | 238 | lcd_scprintf('[');lcd_scprintf('B');lcd_scprintf('T');lcd_scprintf(']'); |
takeuchi | 0:e516dfe942bc | 239 | } |
takeuchi | 0:e516dfe942bc | 240 | else if(cw_sum==KN){ |
takeuchi | 0:e516dfe942bc | 241 | lcd_scprintf('[');lcd_scprintf('K');lcd_scprintf('N');lcd_scprintf(']'); |
takeuchi | 0:e516dfe942bc | 242 | } |
takeuchi | 0:e516dfe942bc | 243 | else if(cw_sum==AR){ |
takeuchi | 0:e516dfe942bc | 244 | lcd_scprintf('[');lcd_scprintf('A');lcd_scprintf('R');lcd_scprintf(']'); |
takeuchi | 0:e516dfe942bc | 245 | } |
takeuchi | 0:e516dfe942bc | 246 | else if(cw_sum==HH){ |
takeuchi | 0:e516dfe942bc | 247 | lcd_scprintf('[');lcd_scprintf('H');lcd_scprintf('H');lcd_scprintf(']'); |
takeuchi | 0:e516dfe942bc | 248 | } |
takeuchi | 0:e516dfe942bc | 249 | else if(cw_sum==AS){ |
takeuchi | 0:e516dfe942bc | 250 | lcd_scprintf('[');lcd_scprintf('A');lcd_scprintf('S');lcd_scprintf(']'); |
takeuchi | 0:e516dfe942bc | 251 | } |
takeuchi | 0:e516dfe942bc | 252 | else if(cw_sum==CT){ |
takeuchi | 0:e516dfe942bc | 253 | lcd_scprintf('[');lcd_scprintf('C');lcd_scprintf('T');lcd_scprintf(']'); |
takeuchi | 0:e516dfe942bc | 254 | } |
takeuchi | 0:e516dfe942bc | 255 | else if(cw_sum==VA){ |
takeuchi | 0:e516dfe942bc | 256 | lcd_scprintf('[');lcd_scprintf('V');lcd_scprintf('A');lcd_scprintf(']'); |
takeuchi | 0:e516dfe942bc | 257 | } |
takeuchi | 0:e516dfe942bc | 258 | |
takeuchi | 0:e516dfe942bc | 259 | else { |
takeuchi | 0:e516dfe942bc | 260 | lcd_scprintf(mj[cw_sum]); |
takeuchi | 0:e516dfe942bc | 261 | } |
takeuchi | 0:e516dfe942bc | 262 | k=0; |
takeuchi | 0:e516dfe942bc | 263 | for(i=0;i<=7;i++){ |
takeuchi | 0:e516dfe942bc | 264 | code[i]=0; |
takeuchi | 0:e516dfe942bc | 265 | } |
takeuchi | 0:e516dfe942bc | 266 | }//if |
takeuchi | 0:e516dfe942bc | 267 | |
takeuchi | 0:e516dfe942bc | 268 | if(scount > tanten*7){ |
takeuchi | 0:e516dfe942bc | 269 | lcd_scprintf(' '); |
takeuchi | 0:e516dfe942bc | 270 | } |
takeuchi | 0:e516dfe942bc | 271 | |
takeuchi | 0:e516dfe942bc | 272 | if(j==10){ |
takeuchi | 0:e516dfe942bc | 273 | tanten=tan_sum/10; |
takeuchi | 0:e516dfe942bc | 274 | cpm=60000/(tanten*57)*5; |
takeuchi | 0:e516dfe942bc | 275 | tan_sum=0; |
takeuchi | 0:e516dfe942bc | 276 | j=0; |
takeuchi | 0:e516dfe942bc | 277 | if(cpm > 100){ |
takeuchi | 0:e516dfe942bc | 278 | cw_class='P'; |
takeuchi | 0:e516dfe942bc | 279 | } |
takeuchi | 0:e516dfe942bc | 280 | else if(cpm > 90){ |
takeuchi | 0:e516dfe942bc | 281 | cw_class='S'; |
takeuchi | 0:e516dfe942bc | 282 | } |
takeuchi | 0:e516dfe942bc | 283 | else if(cpm > 65){ |
takeuchi | 0:e516dfe942bc | 284 | cw_class='1'; |
takeuchi | 0:e516dfe942bc | 285 | } |
takeuchi | 0:e516dfe942bc | 286 | else if(cpm > 40){ |
takeuchi | 0:e516dfe942bc | 287 | cw_class='2'; |
takeuchi | 0:e516dfe942bc | 288 | } |
takeuchi | 0:e516dfe942bc | 289 | else if(cpm > 30){ |
takeuchi | 0:e516dfe942bc | 290 | cw_class='3'; |
takeuchi | 0:e516dfe942bc | 291 | } |
takeuchi | 0:e516dfe942bc | 292 | lcd.locate(10,0); |
takeuchi | 0:e516dfe942bc | 293 | lcd.printf("%3dc(%c)",cpm,cw_class); |
takeuchi | 0:e516dfe942bc | 294 | //lcd.printf("%3dc,%3dm",cpm,tanten); |
takeuchi | 0:e516dfe942bc | 295 | } |
takeuchi | 0:e516dfe942bc | 296 | }//while 1 |
takeuchi | 0:e516dfe942bc | 297 | }//main |