エレキジャックweb mbed入門 mbed CWデコーダ課題8です。数字とアルファベットに加えて、BT・ARなどの通信記号に対応しました。デコーダ基板が必要です

Dependencies:   mbed

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?

UserRevisionLine numberNew 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