Random morse code at 4 different speeds. Originally posted by John Fisher on the AQRP Yahoo group.

Dependencies:   mbed

Committer:
tony1tf
Date:
Sat Jun 22 21:52:12 2013 +0000
Revision:
0:8c725fbd8e0e
Random morse code practice at 4 different speeds. Written by John Fisher and published on the AQRP Yahoo group.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tony1tf 0:8c725fbd8e0e 1
tony1tf 0:8c725fbd8e0e 2 //==============================================================
tony1tf 0:8c725fbd8e0e 3 // Morse Code June 30, 2011 John H. Fisher - K5JHF
tony1tf 0:8c725fbd8e0e 4 //==============================================================
tony1tf 0:8c725fbd8e0e 5
tony1tf 0:8c725fbd8e0e 6 #include "mbed.h"
tony1tf 0:8c725fbd8e0e 7
tony1tf 0:8c725fbd8e0e 8 #include "main.h"
tony1tf 0:8c725fbd8e0e 9
tony1tf 0:8c725fbd8e0e 10 #include "Morse_Code.h"
tony1tf 0:8c725fbd8e0e 11
tony1tf 0:8c725fbd8e0e 12 const float sine_wave [ 32 ] = {
tony1tf 0:8c725fbd8e0e 13
tony1tf 0:8c725fbd8e0e 14 sin ( 1 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 15 sin ( 2 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 16 sin ( 3 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 17 sin ( 4 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 18 sin ( 5 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 19 sin ( 6 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 20 sin ( 7 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 21 sin ( 8 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 22 sin ( 9 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 23 sin ( 10 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 24 sin ( 11 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 25 sin ( 12 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 26 sin ( 13 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 27 sin ( 14 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 28 sin ( 15 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 29 sin ( 16 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 30 sin ( 17 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 31 sin ( 18 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 32 sin ( 19 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 33 sin ( 20 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 34 sin ( 21 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 35 sin ( 22 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 36 sin ( 23 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 37 sin ( 24 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 38 sin ( 25 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 39 sin ( 26 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 40 sin ( 27 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 41 sin ( 28 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 42 sin ( 29 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 43 sin ( 30 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 44 sin ( 31 * step ) / 2.0 + 0.5 ,
tony1tf 0:8c725fbd8e0e 45 sin ( 0 * step ) / 2.0 + 0.5
tony1tf 0:8c725fbd8e0e 46
tony1tf 0:8c725fbd8e0e 47 };
tony1tf 0:8c725fbd8e0e 48
tony1tf 0:8c725fbd8e0e 49 //==============================================================
tony1tf 0:8c725fbd8e0e 50
tony1tf 0:8c725fbd8e0e 51 Morse_Code::Morse_Code ( float WPM_Character,
tony1tf 0:8c725fbd8e0e 52 float WPM_Speed,
tony1tf 0:8c725fbd8e0e 53 int Tone_Frequency,
tony1tf 0:8c725fbd8e0e 54 char LED_Pin,
tony1tf 0:8c725fbd8e0e 55 char Speaker_Pin ) {
tony1tf 0:8c725fbd8e0e 56
tony1tf 0:8c725fbd8e0e 57 _WPM_Character = WPM_Character;
tony1tf 0:8c725fbd8e0e 58
tony1tf 0:8c725fbd8e0e 59 _WPM_Speed = WPM_Speed;
tony1tf 0:8c725fbd8e0e 60
tony1tf 0:8c725fbd8e0e 61 _Tone_Frequency = Tone_Frequency;
tony1tf 0:8c725fbd8e0e 62
tony1tf 0:8c725fbd8e0e 63 _LED_Pin = LED_Pin;
tony1tf 0:8c725fbd8e0e 64
tony1tf 0:8c725fbd8e0e 65 _Speaker_Pin = Speaker_Pin;
tony1tf 0:8c725fbd8e0e 66
tony1tf 0:8c725fbd8e0e 67 Calculate_Morse_Timing ( _WPM_Speed, _WPM_Character );
tony1tf 0:8c725fbd8e0e 68
tony1tf 0:8c725fbd8e0e 69 Practice_On();
tony1tf 0:8c725fbd8e0e 70
tony1tf 0:8c725fbd8e0e 71 }
tony1tf 0:8c725fbd8e0e 72
tony1tf 0:8c725fbd8e0e 73 //==============================================================
tony1tf 0:8c725fbd8e0e 74
tony1tf 0:8c725fbd8e0e 75 void Morse_Code::Sound_On ( void ) {
tony1tf 0:8c725fbd8e0e 76
tony1tf 0:8c725fbd8e0e 77 Morse_Flag._Sound = 1;
tony1tf 0:8c725fbd8e0e 78
tony1tf 0:8c725fbd8e0e 79 }
tony1tf 0:8c725fbd8e0e 80
tony1tf 0:8c725fbd8e0e 81 //==============================================================
tony1tf 0:8c725fbd8e0e 82
tony1tf 0:8c725fbd8e0e 83 void Morse_Code::Sound_Off ( void ) {
tony1tf 0:8c725fbd8e0e 84
tony1tf 0:8c725fbd8e0e 85 Morse_Flag._Sound = 0;
tony1tf 0:8c725fbd8e0e 86
tony1tf 0:8c725fbd8e0e 87 }
tony1tf 0:8c725fbd8e0e 88
tony1tf 0:8c725fbd8e0e 89 //==============================================================
tony1tf 0:8c725fbd8e0e 90
tony1tf 0:8c725fbd8e0e 91 void Morse_Code::Sound_Toggle ( void ) {
tony1tf 0:8c725fbd8e0e 92
tony1tf 0:8c725fbd8e0e 93 Morse_Flag._Sound ^= 1;
tony1tf 0:8c725fbd8e0e 94
tony1tf 0:8c725fbd8e0e 95 }
tony1tf 0:8c725fbd8e0e 96
tony1tf 0:8c725fbd8e0e 97 //==============================================================
tony1tf 0:8c725fbd8e0e 98
tony1tf 0:8c725fbd8e0e 99 void Morse_Code::Practice_On ( void ) {
tony1tf 0:8c725fbd8e0e 100
tony1tf 0:8c725fbd8e0e 101 Morse_Flag._Practice = 1;
tony1tf 0:8c725fbd8e0e 102
tony1tf 0:8c725fbd8e0e 103 }
tony1tf 0:8c725fbd8e0e 104
tony1tf 0:8c725fbd8e0e 105 //==============================================================
tony1tf 0:8c725fbd8e0e 106
tony1tf 0:8c725fbd8e0e 107 void Morse_Code::Practice_Off ( void ) {
tony1tf 0:8c725fbd8e0e 108
tony1tf 0:8c725fbd8e0e 109 Morse_Flag._Practice = 0;
tony1tf 0:8c725fbd8e0e 110
tony1tf 0:8c725fbd8e0e 111 }
tony1tf 0:8c725fbd8e0e 112
tony1tf 0:8c725fbd8e0e 113 //==============================================================
tony1tf 0:8c725fbd8e0e 114
tony1tf 0:8c725fbd8e0e 115 void Morse_Code::Practice_Toggle ( void ) {
tony1tf 0:8c725fbd8e0e 116
tony1tf 0:8c725fbd8e0e 117 Morse_Flag._Practice ^= 1;
tony1tf 0:8c725fbd8e0e 118
tony1tf 0:8c725fbd8e0e 119 // Serial.print ( Morse_Flag._Practice );
tony1tf 0:8c725fbd8e0e 120
tony1tf 0:8c725fbd8e0e 121 }
tony1tf 0:8c725fbd8e0e 122
tony1tf 0:8c725fbd8e0e 123 //==============================================================
tony1tf 0:8c725fbd8e0e 124
tony1tf 0:8c725fbd8e0e 125 int Morse_Code::get_Practice ( void ) {
tony1tf 0:8c725fbd8e0e 126
tony1tf 0:8c725fbd8e0e 127 return Morse_Flag._Practice;
tony1tf 0:8c725fbd8e0e 128
tony1tf 0:8c725fbd8e0e 129 }
tony1tf 0:8c725fbd8e0e 130
tony1tf 0:8c725fbd8e0e 131 //==============================================================
tony1tf 0:8c725fbd8e0e 132
tony1tf 0:8c725fbd8e0e 133 void Morse_Code::set_Tone ( int frequency ) {
tony1tf 0:8c725fbd8e0e 134
tony1tf 0:8c725fbd8e0e 135 _Tone_Frequency = frequency;
tony1tf 0:8c725fbd8e0e 136
tony1tf 0:8c725fbd8e0e 137 }
tony1tf 0:8c725fbd8e0e 138
tony1tf 0:8c725fbd8e0e 139 //==============================================================
tony1tf 0:8c725fbd8e0e 140
tony1tf 0:8c725fbd8e0e 141 int Morse_Code::get_Tone ( ) {
tony1tf 0:8c725fbd8e0e 142
tony1tf 0:8c725fbd8e0e 143 return _Tone_Frequency;
tony1tf 0:8c725fbd8e0e 144
tony1tf 0:8c725fbd8e0e 145 }
tony1tf 0:8c725fbd8e0e 146
tony1tf 0:8c725fbd8e0e 147 //==============================================================
tony1tf 0:8c725fbd8e0e 148
tony1tf 0:8c725fbd8e0e 149 void Morse_Code::Tone_Adjust ( int delta, int limit ) {
tony1tf 0:8c725fbd8e0e 150
tony1tf 0:8c725fbd8e0e 151 Adjust ( &_Tone_Frequency, delta, limit );
tony1tf 0:8c725fbd8e0e 152
tony1tf 0:8c725fbd8e0e 153 }
tony1tf 0:8c725fbd8e0e 154
tony1tf 0:8c725fbd8e0e 155 //==============================================================
tony1tf 0:8c725fbd8e0e 156
tony1tf 0:8c725fbd8e0e 157 void Morse_Code::set_WPM ( float WPM_Speed ) {
tony1tf 0:8c725fbd8e0e 158
tony1tf 0:8c725fbd8e0e 159 _WPM_Speed = WPM_Speed;
tony1tf 0:8c725fbd8e0e 160
tony1tf 0:8c725fbd8e0e 161 }
tony1tf 0:8c725fbd8e0e 162
tony1tf 0:8c725fbd8e0e 163 //==============================================================
tony1tf 0:8c725fbd8e0e 164
tony1tf 0:8c725fbd8e0e 165 float Morse_Code::get_WPM ( ) {
tony1tf 0:8c725fbd8e0e 166
tony1tf 0:8c725fbd8e0e 167 return _WPM_Speed;
tony1tf 0:8c725fbd8e0e 168
tony1tf 0:8c725fbd8e0e 169 }
tony1tf 0:8c725fbd8e0e 170
tony1tf 0:8c725fbd8e0e 171 //==============================================================
tony1tf 0:8c725fbd8e0e 172
tony1tf 0:8c725fbd8e0e 173 void Morse_Code::WPM_Adjust ( float delta, float limit ) {
tony1tf 0:8c725fbd8e0e 174
tony1tf 0:8c725fbd8e0e 175 Adjust ( &_WPM_Speed, delta, limit );
tony1tf 0:8c725fbd8e0e 176
tony1tf 0:8c725fbd8e0e 177 Calculate_Morse_Timing ( _WPM_Speed, _WPM_Character );
tony1tf 0:8c725fbd8e0e 178
tony1tf 0:8c725fbd8e0e 179 }
tony1tf 0:8c725fbd8e0e 180
tony1tf 0:8c725fbd8e0e 181 //==============================================================
tony1tf 0:8c725fbd8e0e 182
tony1tf 0:8c725fbd8e0e 183 char Morse_Code::Morse ( char ASCII ) {
tony1tf 0:8c725fbd8e0e 184
tony1tf 0:8c725fbd8e0e 185 switch ( ASCII ) {
tony1tf 0:8c725fbd8e0e 186
tony1tf 0:8c725fbd8e0e 187 case 'a':
tony1tf 0:8c725fbd8e0e 188 case 'A':
tony1tf 0:8c725fbd8e0e 189
tony1tf 0:8c725fbd8e0e 190 return 0x05; // B'0000 0101' ;A
tony1tf 0:8c725fbd8e0e 191
tony1tf 0:8c725fbd8e0e 192 case 'b':
tony1tf 0:8c725fbd8e0e 193 case 'B':
tony1tf 0:8c725fbd8e0e 194
tony1tf 0:8c725fbd8e0e 195 return 0x18; // B'0001 1000' ;B
tony1tf 0:8c725fbd8e0e 196
tony1tf 0:8c725fbd8e0e 197 case 'c':
tony1tf 0:8c725fbd8e0e 198 case 'C':
tony1tf 0:8c725fbd8e0e 199
tony1tf 0:8c725fbd8e0e 200 return 0x1A; // B'0001 1010' ;C
tony1tf 0:8c725fbd8e0e 201
tony1tf 0:8c725fbd8e0e 202 case 'd':
tony1tf 0:8c725fbd8e0e 203 case 'D':
tony1tf 0:8c725fbd8e0e 204
tony1tf 0:8c725fbd8e0e 205 return 0x0C; // B'0000 1100' ;D
tony1tf 0:8c725fbd8e0e 206
tony1tf 0:8c725fbd8e0e 207 case 'e':
tony1tf 0:8c725fbd8e0e 208 case 'E':
tony1tf 0:8c725fbd8e0e 209
tony1tf 0:8c725fbd8e0e 210 return 0x02; // B'0000 0010' ;E
tony1tf 0:8c725fbd8e0e 211
tony1tf 0:8c725fbd8e0e 212 case 'f':
tony1tf 0:8c725fbd8e0e 213 case 'F':
tony1tf 0:8c725fbd8e0e 214
tony1tf 0:8c725fbd8e0e 215 return 0x12; // B'0001 0010' ;F
tony1tf 0:8c725fbd8e0e 216
tony1tf 0:8c725fbd8e0e 217 case 'g':
tony1tf 0:8c725fbd8e0e 218 case 'G':
tony1tf 0:8c725fbd8e0e 219
tony1tf 0:8c725fbd8e0e 220 return 0x0E; // B'0000 1110' ;G
tony1tf 0:8c725fbd8e0e 221
tony1tf 0:8c725fbd8e0e 222 case 'h':
tony1tf 0:8c725fbd8e0e 223 case 'H':
tony1tf 0:8c725fbd8e0e 224
tony1tf 0:8c725fbd8e0e 225 return 0x10; // B'0001 0000' ;H
tony1tf 0:8c725fbd8e0e 226
tony1tf 0:8c725fbd8e0e 227 case 'i':
tony1tf 0:8c725fbd8e0e 228 case 'I':
tony1tf 0:8c725fbd8e0e 229
tony1tf 0:8c725fbd8e0e 230 return 0x04; // B'0000 0100' ;I
tony1tf 0:8c725fbd8e0e 231
tony1tf 0:8c725fbd8e0e 232 case 'j':
tony1tf 0:8c725fbd8e0e 233 case 'J':
tony1tf 0:8c725fbd8e0e 234
tony1tf 0:8c725fbd8e0e 235 return 0x17; // B'0001 0111' ;J
tony1tf 0:8c725fbd8e0e 236
tony1tf 0:8c725fbd8e0e 237 case 'k':
tony1tf 0:8c725fbd8e0e 238 case 'K':
tony1tf 0:8c725fbd8e0e 239
tony1tf 0:8c725fbd8e0e 240 return 0x0D; // B'0000 1101' ;K
tony1tf 0:8c725fbd8e0e 241
tony1tf 0:8c725fbd8e0e 242 case 'l':
tony1tf 0:8c725fbd8e0e 243 case 'L':
tony1tf 0:8c725fbd8e0e 244
tony1tf 0:8c725fbd8e0e 245 return 0x14; // B'0001 0100' ;L
tony1tf 0:8c725fbd8e0e 246
tony1tf 0:8c725fbd8e0e 247 case 'm':
tony1tf 0:8c725fbd8e0e 248 case 'M':
tony1tf 0:8c725fbd8e0e 249
tony1tf 0:8c725fbd8e0e 250 return 0x07; // B'0000 0111' ;M
tony1tf 0:8c725fbd8e0e 251
tony1tf 0:8c725fbd8e0e 252 case 'n':
tony1tf 0:8c725fbd8e0e 253 case 'N':
tony1tf 0:8c725fbd8e0e 254
tony1tf 0:8c725fbd8e0e 255 return 0x06; // B'0000 0110' ;N
tony1tf 0:8c725fbd8e0e 256
tony1tf 0:8c725fbd8e0e 257 case 'o':
tony1tf 0:8c725fbd8e0e 258 case 'O':
tony1tf 0:8c725fbd8e0e 259
tony1tf 0:8c725fbd8e0e 260 return 0x0F; // B'0000 1111' ;O
tony1tf 0:8c725fbd8e0e 261
tony1tf 0:8c725fbd8e0e 262 case 'p':
tony1tf 0:8c725fbd8e0e 263 case 'P':
tony1tf 0:8c725fbd8e0e 264
tony1tf 0:8c725fbd8e0e 265 return 0x16; // B'0001 0110' ;P
tony1tf 0:8c725fbd8e0e 266
tony1tf 0:8c725fbd8e0e 267 case 'q':
tony1tf 0:8c725fbd8e0e 268 case 'Q':
tony1tf 0:8c725fbd8e0e 269
tony1tf 0:8c725fbd8e0e 270 return 0x1D; // B'0001 1101' ;Q
tony1tf 0:8c725fbd8e0e 271
tony1tf 0:8c725fbd8e0e 272 case 'r':
tony1tf 0:8c725fbd8e0e 273 case 'R':
tony1tf 0:8c725fbd8e0e 274
tony1tf 0:8c725fbd8e0e 275 return 0x0A; // B'0000 1010' ;R
tony1tf 0:8c725fbd8e0e 276
tony1tf 0:8c725fbd8e0e 277 case 's':
tony1tf 0:8c725fbd8e0e 278 case 'S':
tony1tf 0:8c725fbd8e0e 279
tony1tf 0:8c725fbd8e0e 280 return 0x08; // B'0000 1000' ;S
tony1tf 0:8c725fbd8e0e 281
tony1tf 0:8c725fbd8e0e 282 case 't':
tony1tf 0:8c725fbd8e0e 283 case 'T':
tony1tf 0:8c725fbd8e0e 284
tony1tf 0:8c725fbd8e0e 285 return 0x03; // B'0000 0011' ;T
tony1tf 0:8c725fbd8e0e 286
tony1tf 0:8c725fbd8e0e 287 case 'u':
tony1tf 0:8c725fbd8e0e 288 case 'U':
tony1tf 0:8c725fbd8e0e 289
tony1tf 0:8c725fbd8e0e 290 return 0x09; // B'0000 1001' ;U
tony1tf 0:8c725fbd8e0e 291
tony1tf 0:8c725fbd8e0e 292 case 'v':
tony1tf 0:8c725fbd8e0e 293 case 'V':
tony1tf 0:8c725fbd8e0e 294
tony1tf 0:8c725fbd8e0e 295 return 0x11; // B'0001 0001' ;V
tony1tf 0:8c725fbd8e0e 296
tony1tf 0:8c725fbd8e0e 297 case 'w':
tony1tf 0:8c725fbd8e0e 298 case 'W':
tony1tf 0:8c725fbd8e0e 299
tony1tf 0:8c725fbd8e0e 300 return 0x0B; // B'0000 1011' ;W
tony1tf 0:8c725fbd8e0e 301
tony1tf 0:8c725fbd8e0e 302 case 'x':
tony1tf 0:8c725fbd8e0e 303 case 'X':
tony1tf 0:8c725fbd8e0e 304
tony1tf 0:8c725fbd8e0e 305 return 0x19; // B'0001 1001' ;X
tony1tf 0:8c725fbd8e0e 306
tony1tf 0:8c725fbd8e0e 307 case 'y':
tony1tf 0:8c725fbd8e0e 308 case 'Y':
tony1tf 0:8c725fbd8e0e 309
tony1tf 0:8c725fbd8e0e 310 return 0x1B; // B'0001 1011' ;Y
tony1tf 0:8c725fbd8e0e 311
tony1tf 0:8c725fbd8e0e 312 case 'z':
tony1tf 0:8c725fbd8e0e 313 case 'Z':
tony1tf 0:8c725fbd8e0e 314
tony1tf 0:8c725fbd8e0e 315 return 0x1C; // B'0001 1100' ;Z
tony1tf 0:8c725fbd8e0e 316
tony1tf 0:8c725fbd8e0e 317 case '1':
tony1tf 0:8c725fbd8e0e 318
tony1tf 0:8c725fbd8e0e 319 return 0x2F; // B'0010 1111' ;1
tony1tf 0:8c725fbd8e0e 320
tony1tf 0:8c725fbd8e0e 321 case '2':
tony1tf 0:8c725fbd8e0e 322
tony1tf 0:8c725fbd8e0e 323 return 0x27; // B'0010 0111' ;2
tony1tf 0:8c725fbd8e0e 324
tony1tf 0:8c725fbd8e0e 325 case '3':
tony1tf 0:8c725fbd8e0e 326
tony1tf 0:8c725fbd8e0e 327 return 0x23; // B'0010 0011' ;3
tony1tf 0:8c725fbd8e0e 328
tony1tf 0:8c725fbd8e0e 329 case '4':
tony1tf 0:8c725fbd8e0e 330
tony1tf 0:8c725fbd8e0e 331 return 0x21; // B'0010 0001' ;4
tony1tf 0:8c725fbd8e0e 332
tony1tf 0:8c725fbd8e0e 333 case '5':
tony1tf 0:8c725fbd8e0e 334
tony1tf 0:8c725fbd8e0e 335 return 0x20; // B'0010 0000' ;5
tony1tf 0:8c725fbd8e0e 336
tony1tf 0:8c725fbd8e0e 337 case '6':
tony1tf 0:8c725fbd8e0e 338
tony1tf 0:8c725fbd8e0e 339 return 0x30; // B'0011 0000' ;6
tony1tf 0:8c725fbd8e0e 340
tony1tf 0:8c725fbd8e0e 341 case '7':
tony1tf 0:8c725fbd8e0e 342
tony1tf 0:8c725fbd8e0e 343 return 0x38; // B'0011 1000' ;7
tony1tf 0:8c725fbd8e0e 344
tony1tf 0:8c725fbd8e0e 345 case '8':
tony1tf 0:8c725fbd8e0e 346
tony1tf 0:8c725fbd8e0e 347 return 0x3C; // B'0011 1100' ;8
tony1tf 0:8c725fbd8e0e 348
tony1tf 0:8c725fbd8e0e 349 case '9':
tony1tf 0:8c725fbd8e0e 350
tony1tf 0:8c725fbd8e0e 351 return 0x3E; // B'0011 1110' ;9
tony1tf 0:8c725fbd8e0e 352
tony1tf 0:8c725fbd8e0e 353 case '0':
tony1tf 0:8c725fbd8e0e 354
tony1tf 0:8c725fbd8e0e 355 return 0x3F; // B'0011 1111' ;0
tony1tf 0:8c725fbd8e0e 356
tony1tf 0:8c725fbd8e0e 357 case '.':
tony1tf 0:8c725fbd8e0e 358
tony1tf 0:8c725fbd8e0e 359 return 0x55; // B'0101 0101' ;.
tony1tf 0:8c725fbd8e0e 360
tony1tf 0:8c725fbd8e0e 361 case ',':
tony1tf 0:8c725fbd8e0e 362
tony1tf 0:8c725fbd8e0e 363 return 0x73; // B'0111 0011' ;,
tony1tf 0:8c725fbd8e0e 364
tony1tf 0:8c725fbd8e0e 365 case ';':
tony1tf 0:8c725fbd8e0e 366
tony1tf 0:8c725fbd8e0e 367 return 0x6A; // B'0110 1010' ;;
tony1tf 0:8c725fbd8e0e 368
tony1tf 0:8c725fbd8e0e 369 case ':':
tony1tf 0:8c725fbd8e0e 370
tony1tf 0:8c725fbd8e0e 371 return 0x78; // B'0111 1000' ;:
tony1tf 0:8c725fbd8e0e 372
tony1tf 0:8c725fbd8e0e 373 case 0x27:
tony1tf 0:8c725fbd8e0e 374
tony1tf 0:8c725fbd8e0e 375 return 0x5E; // B'0101 1110' ;'
tony1tf 0:8c725fbd8e0e 376
tony1tf 0:8c725fbd8e0e 377 case 0x22:
tony1tf 0:8c725fbd8e0e 378
tony1tf 0:8c725fbd8e0e 379 return 0x52; // B'0101 0010' ;"
tony1tf 0:8c725fbd8e0e 380
tony1tf 0:8c725fbd8e0e 381 case '/':
tony1tf 0:8c725fbd8e0e 382
tony1tf 0:8c725fbd8e0e 383 return 0x32; // B'0011 0010' ;/
tony1tf 0:8c725fbd8e0e 384
tony1tf 0:8c725fbd8e0e 385 case '?':
tony1tf 0:8c725fbd8e0e 386
tony1tf 0:8c725fbd8e0e 387 return 0x4C; // B'0100 1100' ;?
tony1tf 0:8c725fbd8e0e 388
tony1tf 0:8c725fbd8e0e 389 case '-':
tony1tf 0:8c725fbd8e0e 390
tony1tf 0:8c725fbd8e0e 391 return 0x61; // B'0110 0001' ;-
tony1tf 0:8c725fbd8e0e 392
tony1tf 0:8c725fbd8e0e 393 case '_':
tony1tf 0:8c725fbd8e0e 394
tony1tf 0:8c725fbd8e0e 395 return 0x4D; // B'0100 1101' ;_
tony1tf 0:8c725fbd8e0e 396
tony1tf 0:8c725fbd8e0e 397 case '=':
tony1tf 0:8c725fbd8e0e 398
tony1tf 0:8c725fbd8e0e 399 return 0x31; // B'0011 0001' ;=
tony1tf 0:8c725fbd8e0e 400
tony1tf 0:8c725fbd8e0e 401 case '+':
tony1tf 0:8c725fbd8e0e 402
tony1tf 0:8c725fbd8e0e 403 return 0x2A; // B'0010 1010' ;+
tony1tf 0:8c725fbd8e0e 404
tony1tf 0:8c725fbd8e0e 405 case '!':
tony1tf 0:8c725fbd8e0e 406
tony1tf 0:8c725fbd8e0e 407 return 0x22; // B'0010 0010' ;!
tony1tf 0:8c725fbd8e0e 408
tony1tf 0:8c725fbd8e0e 409 case '@':
tony1tf 0:8c725fbd8e0e 410
tony1tf 0:8c725fbd8e0e 411 return 0x5A; // B'0101 1010' ;@
tony1tf 0:8c725fbd8e0e 412
tony1tf 0:8c725fbd8e0e 413 case '#':
tony1tf 0:8c725fbd8e0e 414
tony1tf 0:8c725fbd8e0e 415 return 0x54; // B'0101 0100' ;#
tony1tf 0:8c725fbd8e0e 416
tony1tf 0:8c725fbd8e0e 417 case '$':
tony1tf 0:8c725fbd8e0e 418
tony1tf 0:8c725fbd8e0e 419 return 0x89; // B'1000 1001' ;$
tony1tf 0:8c725fbd8e0e 420
tony1tf 0:8c725fbd8e0e 421 case '%':
tony1tf 0:8c725fbd8e0e 422
tony1tf 0:8c725fbd8e0e 423 return 0x35; // B'0011 0101' ;%
tony1tf 0:8c725fbd8e0e 424
tony1tf 0:8c725fbd8e0e 425 case '^':
tony1tf 0:8c725fbd8e0e 426
tony1tf 0:8c725fbd8e0e 427 return 0x0D; // B'0000 1101' ;^
tony1tf 0:8c725fbd8e0e 428
tony1tf 0:8c725fbd8e0e 429 case '&':
tony1tf 0:8c725fbd8e0e 430
tony1tf 0:8c725fbd8e0e 431 return 0x28; // B'0010 1000' ;&
tony1tf 0:8c725fbd8e0e 432
tony1tf 0:8c725fbd8e0e 433 case '*':
tony1tf 0:8c725fbd8e0e 434
tony1tf 0:8c725fbd8e0e 435 return 0x45; // B'0100 0101' ;*
tony1tf 0:8c725fbd8e0e 436
tony1tf 0:8c725fbd8e0e 437 case '(':
tony1tf 0:8c725fbd8e0e 438
tony1tf 0:8c725fbd8e0e 439 return 0x36; // B'0011 0110' ;(
tony1tf 0:8c725fbd8e0e 440
tony1tf 0:8c725fbd8e0e 441 case ')':
tony1tf 0:8c725fbd8e0e 442
tony1tf 0:8c725fbd8e0e 443 return 0x6D; // B'0110 1101' ;)
tony1tf 0:8c725fbd8e0e 444
tony1tf 0:8c725fbd8e0e 445 case 0x09:
tony1tf 0:8c725fbd8e0e 446
tony1tf 0:8c725fbd8e0e 447 return 0x54; // B'0101 0100' ;TAB
tony1tf 0:8c725fbd8e0e 448
tony1tf 0:8c725fbd8e0e 449 case 0x08:
tony1tf 0:8c725fbd8e0e 450
tony1tf 0:8c725fbd8e0e 451 return 0x80; // B'1000 0000' ;Backspace
tony1tf 0:8c725fbd8e0e 452
tony1tf 0:8c725fbd8e0e 453 case ' ':
tony1tf 0:8c725fbd8e0e 454
tony1tf 0:8c725fbd8e0e 455 return 0x01; // B'1000 0000' ;space
tony1tf 0:8c725fbd8e0e 456
tony1tf 0:8c725fbd8e0e 457 default:
tony1tf 0:8c725fbd8e0e 458
tony1tf 0:8c725fbd8e0e 459 return 0x01;
tony1tf 0:8c725fbd8e0e 460
tony1tf 0:8c725fbd8e0e 461 }
tony1tf 0:8c725fbd8e0e 462
tony1tf 0:8c725fbd8e0e 463 }
tony1tf 0:8c725fbd8e0e 464
tony1tf 0:8c725fbd8e0e 465 //===================================================================
tony1tf 0:8c725fbd8e0e 466
tony1tf 0:8c725fbd8e0e 467 void Morse_Code::Send_Morse ( char Morse ) {
tony1tf 0:8c725fbd8e0e 468
tony1tf 0:8c725fbd8e0e 469 char bit_counter = 8;
tony1tf 0:8c725fbd8e0e 470
tony1tf 0:8c725fbd8e0e 471 while ( !( Morse & 0x80 ) ) {
tony1tf 0:8c725fbd8e0e 472
tony1tf 0:8c725fbd8e0e 473 Morse <<= 1;
tony1tf 0:8c725fbd8e0e 474
tony1tf 0:8c725fbd8e0e 475 --bit_counter;
tony1tf 0:8c725fbd8e0e 476
tony1tf 0:8c725fbd8e0e 477 }
tony1tf 0:8c725fbd8e0e 478
tony1tf 0:8c725fbd8e0e 479 Morse_Flag.last_bit = 0;
tony1tf 0:8c725fbd8e0e 480
tony1tf 0:8c725fbd8e0e 481 while ( --bit_counter ) {
tony1tf 0:8c725fbd8e0e 482
tony1tf 0:8c725fbd8e0e 483 if ( bit_counter == 1 ) Morse_Flag.last_bit = 1;
tony1tf 0:8c725fbd8e0e 484
tony1tf 0:8c725fbd8e0e 485 if ( ( Morse <<= 1 ) & 0x80 ) dah();
tony1tf 0:8c725fbd8e0e 486
tony1tf 0:8c725fbd8e0e 487 else dit();
tony1tf 0:8c725fbd8e0e 488
tony1tf 0:8c725fbd8e0e 489 if ( !Morse_Flag.last_bit ) wait ( u );
tony1tf 0:8c725fbd8e0e 490
tony1tf 0:8c725fbd8e0e 491 else if ( Morse_Flag.last_char ) wait ( tw );
tony1tf 0:8c725fbd8e0e 492
tony1tf 0:8c725fbd8e0e 493 else wait ( tc );
tony1tf 0:8c725fbd8e0e 494
tony1tf 0:8c725fbd8e0e 495 }
tony1tf 0:8c725fbd8e0e 496
tony1tf 0:8c725fbd8e0e 497 }
tony1tf 0:8c725fbd8e0e 498
tony1tf 0:8c725fbd8e0e 499 //===================================================================
tony1tf 0:8c725fbd8e0e 500
tony1tf 0:8c725fbd8e0e 501 char Morse_Code::Random_Code ( void ) {
tony1tf 0:8c725fbd8e0e 502
tony1tf 0:8c725fbd8e0e 503 char ascii;
tony1tf 0:8c725fbd8e0e 504
tony1tf 0:8c725fbd8e0e 505 static char count;
tony1tf 0:8c725fbd8e0e 506
tony1tf 0:8c725fbd8e0e 507 ascii = 32 + rand () % 95;
tony1tf 0:8c725fbd8e0e 508
tony1tf 0:8c725fbd8e0e 509 Send_Morse ( Morse ( ascii ) );
tony1tf 0:8c725fbd8e0e 510
tony1tf 0:8c725fbd8e0e 511 if ( ( count++ ) % 5 == 0 ) Morse_Flag.last_char = 1;
tony1tf 0:8c725fbd8e0e 512
tony1tf 0:8c725fbd8e0e 513 else Morse_Flag.last_char = 0;
tony1tf 0:8c725fbd8e0e 514
tony1tf 0:8c725fbd8e0e 515 return ascii;
tony1tf 0:8c725fbd8e0e 516
tony1tf 0:8c725fbd8e0e 517 }
tony1tf 0:8c725fbd8e0e 518
tony1tf 0:8c725fbd8e0e 519 //==============================================================
tony1tf 0:8c725fbd8e0e 520 // The ARRL Morse Transmission Timing Standard
tony1tf 0:8c725fbd8e0e 521
tony1tf 0:8c725fbd8e0e 522 void Morse_Code::Calculate_Morse_Timing ( float s, float c ) { // In seconds for wait function
tony1tf 0:8c725fbd8e0e 523
tony1tf 0:8c725fbd8e0e 524 if ( s >= 18.0 ) {
tony1tf 0:8c725fbd8e0e 525
tony1tf 0:8c725fbd8e0e 526 c = s;
tony1tf 0:8c725fbd8e0e 527
tony1tf 0:8c725fbd8e0e 528 u = 1.2 / c;
tony1tf 0:8c725fbd8e0e 529
tony1tf 0:8c725fbd8e0e 530 tc = 3.0 * u;
tony1tf 0:8c725fbd8e0e 531
tony1tf 0:8c725fbd8e0e 532 tw = 7.0 * u;
tony1tf 0:8c725fbd8e0e 533
tony1tf 0:8c725fbd8e0e 534 }
tony1tf 0:8c725fbd8e0e 535
tony1tf 0:8c725fbd8e0e 536 else {
tony1tf 0:8c725fbd8e0e 537
tony1tf 0:8c725fbd8e0e 538 u = 1.2 / c;
tony1tf 0:8c725fbd8e0e 539
tony1tf 0:8c725fbd8e0e 540 ta = ( 60.0 * c - 37.2 * s ) / ( s * c );
tony1tf 0:8c725fbd8e0e 541
tony1tf 0:8c725fbd8e0e 542 tc = 3.0 * ta / 19.0;
tony1tf 0:8c725fbd8e0e 543
tony1tf 0:8c725fbd8e0e 544 tw = 7.0 * ta / 19.0;
tony1tf 0:8c725fbd8e0e 545
tony1tf 0:8c725fbd8e0e 546 }
tony1tf 0:8c725fbd8e0e 547
tony1tf 0:8c725fbd8e0e 548 }
tony1tf 0:8c725fbd8e0e 549
tony1tf 0:8c725fbd8e0e 550 //==============================================================
tony1tf 0:8c725fbd8e0e 551
tony1tf 0:8c725fbd8e0e 552 void Morse_Code::dit ( ) {
tony1tf 0:8c725fbd8e0e 553
tony1tf 0:8c725fbd8e0e 554 led = on;
tony1tf 0:8c725fbd8e0e 555
tony1tf 0:8c725fbd8e0e 556 Tone ( _Tone_Frequency, u );
tony1tf 0:8c725fbd8e0e 557
tony1tf 0:8c725fbd8e0e 558 led = off;
tony1tf 0:8c725fbd8e0e 559
tony1tf 0:8c725fbd8e0e 560 }
tony1tf 0:8c725fbd8e0e 561
tony1tf 0:8c725fbd8e0e 562 //==============================================================
tony1tf 0:8c725fbd8e0e 563
tony1tf 0:8c725fbd8e0e 564 void Morse_Code::dah ( ) {
tony1tf 0:8c725fbd8e0e 565
tony1tf 0:8c725fbd8e0e 566 led = on;
tony1tf 0:8c725fbd8e0e 567
tony1tf 0:8c725fbd8e0e 568 Tone ( _Tone_Frequency, 3.0 * u );
tony1tf 0:8c725fbd8e0e 569
tony1tf 0:8c725fbd8e0e 570 led = off;
tony1tf 0:8c725fbd8e0e 571
tony1tf 0:8c725fbd8e0e 572 }
tony1tf 0:8c725fbd8e0e 573
tony1tf 0:8c725fbd8e0e 574 //=============================================================
tony1tf 0:8c725fbd8e0e 575
tony1tf 0:8c725fbd8e0e 576 void Morse_Code::Tone ( int freq_factor, float duration ) {
tony1tf 0:8c725fbd8e0e 577
tony1tf 0:8c725fbd8e0e 578 Timer timer;
tony1tf 0:8c725fbd8e0e 579
tony1tf 0:8c725fbd8e0e 580 char i = 0;
tony1tf 0:8c725fbd8e0e 581
tony1tf 0:8c725fbd8e0e 582 unsigned int delay;
tony1tf 0:8c725fbd8e0e 583
tony1tf 0:8c725fbd8e0e 584 timer.start();
tony1tf 0:8c725fbd8e0e 585
tony1tf 0:8c725fbd8e0e 586 timer.reset();
tony1tf 0:8c725fbd8e0e 587
tony1tf 0:8c725fbd8e0e 588 do {
tony1tf 0:8c725fbd8e0e 589
tony1tf 0:8c725fbd8e0e 590 for ( i = 0; i < 32; i++ ) {
tony1tf 0:8c725fbd8e0e 591
tony1tf 0:8c725fbd8e0e 592 piezo = sine_wave [ i ];
tony1tf 0:8c725fbd8e0e 593
tony1tf 0:8c725fbd8e0e 594 for ( delay = 0; delay < freq_factor; delay++ );
tony1tf 0:8c725fbd8e0e 595
tony1tf 0:8c725fbd8e0e 596 }
tony1tf 0:8c725fbd8e0e 597
tony1tf 0:8c725fbd8e0e 598 } while ( timer.read() < duration );
tony1tf 0:8c725fbd8e0e 599
tony1tf 0:8c725fbd8e0e 600 }
tony1tf 0:8c725fbd8e0e 601
tony1tf 0:8c725fbd8e0e 602 //=============================================================
tony1tf 0:8c725fbd8e0e 603
tony1tf 0:8c725fbd8e0e 604
tony1tf 0:8c725fbd8e0e 605
tony1tf 0:8c725fbd8e0e 606