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