Morse code encoder library

Dependents:   MIDI_CW

Committer:
ChuckTimber
Date:
Sun Jul 13 09:26:34 2014 +0000
Revision:
0:27c38e4d6e4e
Child:
1:e377d081edea
built up lib of morse

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ChuckTimber 0:27c38e4d6e4e 1 #include "morse.h"
ChuckTimber 0:27c38e4d6e4e 2 #include "mbed.h"
ChuckTimber 0:27c38e4d6e4e 3
ChuckTimber 0:27c38e4d6e4e 4 /** class to generate Morse code tone and keying signal.
ChuckTimber 0:27c38e4d6e4e 5 * sound with a buzzer, based on a PwmOut,
ChuckTimber 0:27c38e4d6e4e 6 * keying signal base on a DigitalOut
ChuckTimber 0:27c38e4d6e4e 7 *
ChuckTimber 0:27c38e4d6e4e 8 * Example:
ChuckTimber 0:27c38e4d6e4e 9 * @code
ChuckTimber 0:27c38e4d6e4e 10 * // Morse sample
ChuckTimber 0:27c38e4d6e4e 11 * #include "mbed.h"
ChuckTimber 0:27c38e4d6e4e 12 * #include "morse.h"
ChuckTimber 0:27c38e4d6e4e 13 *
ChuckTimber 0:27c38e4d6e4e 14 * char* codes[] = { ".-", "-...", "-.-.", "-..", ".",
ChuckTimber 0:27c38e4d6e4e 15 * "..-.", "--.", "....", "..", ".---",
ChuckTimber 0:27c38e4d6e4e 16 * "-.-", ".-..", "--", "-.", "---",
ChuckTimber 0:27c38e4d6e4e 17 * ".--.", "--.-", ".-.", "...", "-",
ChuckTimber 0:27c38e4d6e4e 18 * "..-", "...-", ".--", "-..-", "-.--", "--..", " "
ChuckTimber 0:27c38e4d6e4e 19 * };
ChuckTimber 0:27c38e4d6e4e 20 *
ChuckTimber 0:27c38e4d6e4e 21 * Morse morse;
ChuckTimber 0:27c38e4d6e4e 22 * //Morse morse(dp24, LED1);
ChuckTimber 0:27c38e4d6e4e 23 * //Morse morse(dp24, LED1, 0.1, 800);
ChuckTimber 0:27c38e4d6e4e 24 *
ChuckTimber 0:27c38e4d6e4e 25 * int main()
ChuckTimber 0:27c38e4d6e4e 26 * {
ChuckTimber 0:27c38e4d6e4e 27 * int i;
ChuckTimber 0:27c38e4d6e4e 28 *
ChuckTimber 0:27c38e4d6e4e 29 * while(1) {
ChuckTimber 0:27c38e4d6e4e 30 * for (i = 0; i < 27; i++) {
ChuckTimber 0:27c38e4d6e4e 31 * morse.code(codes[i]);
ChuckTimber 0:27c38e4d6e4e 32 * }
ChuckTimber 0:27c38e4d6e4e 33 * }
ChuckTimber 0:27c38e4d6e4e 34 * }
ChuckTimber 0:27c38e4d6e4e 35 * @endcode
ChuckTimber 0:27c38e4d6e4e 36 */
ChuckTimber 0:27c38e4d6e4e 37
ChuckTimber 0:27c38e4d6e4e 38 /** beeping function
ChuckTimber 0:27c38e4d6e4e 39 * this is a private funciton / internal use only
ChuckTimber 0:27c38e4d6e4e 40 */
ChuckTimber 0:27c38e4d6e4e 41 void Morse::beep (int k)
ChuckTimber 0:27c38e4d6e4e 42 {
ChuckTimber 0:27c38e4d6e4e 43 _pwm.write(0.5);
ChuckTimber 0:27c38e4d6e4e 44 _pin = 1;
ChuckTimber 0:27c38e4d6e4e 45 wait(cw_tick * (float)k);
ChuckTimber 0:27c38e4d6e4e 46 _pwm.write(0.0);
ChuckTimber 0:27c38e4d6e4e 47 _pin = 0;
ChuckTimber 0:27c38e4d6e4e 48 }
ChuckTimber 0:27c38e4d6e4e 49
ChuckTimber 0:27c38e4d6e4e 50 /** spacing function
ChuckTimber 0:27c38e4d6e4e 51 * this is a private funciton / internal use only
ChuckTimber 0:27c38e4d6e4e 52 */
ChuckTimber 0:27c38e4d6e4e 53 void Morse::space(int k)
ChuckTimber 0:27c38e4d6e4e 54 {
ChuckTimber 0:27c38e4d6e4e 55 wait(cw_tick * (float)k);
ChuckTimber 0:27c38e4d6e4e 56 }
ChuckTimber 0:27c38e4d6e4e 57
ChuckTimber 0:27c38e4d6e4e 58 /** set frequency
ChuckTimber 0:27c38e4d6e4e 59 */
ChuckTimber 0:27c38e4d6e4e 60 void Morse::setfreq(float f)
ChuckTimber 0:27c38e4d6e4e 61 {
ChuckTimber 0:27c38e4d6e4e 62 freq = f;
ChuckTimber 0:27c38e4d6e4e 63 _pwm.period(1.0/freq);
ChuckTimber 0:27c38e4d6e4e 64 _pwm.write(0.0);
ChuckTimber 0:27c38e4d6e4e 65 }
ChuckTimber 0:27c38e4d6e4e 66
ChuckTimber 0:27c38e4d6e4e 67 /** get frequency
ChuckTimber 0:27c38e4d6e4e 68 */
ChuckTimber 0:27c38e4d6e4e 69 float Morse::getfreq()
ChuckTimber 0:27c38e4d6e4e 70 {
ChuckTimber 0:27c38e4d6e4e 71 return freq;
ChuckTimber 0:27c38e4d6e4e 72 }
ChuckTimber 0:27c38e4d6e4e 73
ChuckTimber 0:27c38e4d6e4e 74 /** set morse code speed
ChuckTimber 0:27c38e4d6e4e 75 */
ChuckTimber 0:27c38e4d6e4e 76 void Morse::settick(float t)
ChuckTimber 0:27c38e4d6e4e 77 {
ChuckTimber 0:27c38e4d6e4e 78 if ((t > 0.03) && (t < 0.3))
ChuckTimber 0:27c38e4d6e4e 79 cw_tick = t;
ChuckTimber 0:27c38e4d6e4e 80 }
ChuckTimber 0:27c38e4d6e4e 81
ChuckTimber 0:27c38e4d6e4e 82 /** get morse code speed
ChuckTimber 0:27c38e4d6e4e 83 */
ChuckTimber 0:27c38e4d6e4e 84 float Morse::gettick()
ChuckTimber 0:27c38e4d6e4e 85 {
ChuckTimber 0:27c38e4d6e4e 86 return cw_tick;
ChuckTimber 0:27c38e4d6e4e 87 }
ChuckTimber 0:27c38e4d6e4e 88
ChuckTimber 0:27c38e4d6e4e 89 /** Coding function
ChuckTimber 0:27c38e4d6e4e 90 *
ChuckTimber 0:27c38e4d6e4e 91 * @param code - a pointer to code strings
ChuckTimber 0:27c38e4d6e4e 92 */
ChuckTimber 0:27c38e4d6e4e 93 void Morse::code(char* code)
ChuckTimber 0:27c38e4d6e4e 94 {
ChuckTimber 0:27c38e4d6e4e 95 char* ptr;
ChuckTimber 0:27c38e4d6e4e 96
ChuckTimber 0:27c38e4d6e4e 97 for (ptr = code; *ptr; ptr++, space(1) ) {
ChuckTimber 0:27c38e4d6e4e 98 switch (*ptr) {
ChuckTimber 0:27c38e4d6e4e 99 case '-':
ChuckTimber 0:27c38e4d6e4e 100 beep(3); // dash();
ChuckTimber 0:27c38e4d6e4e 101 break;
ChuckTimber 0:27c38e4d6e4e 102 case '.':
ChuckTimber 0:27c38e4d6e4e 103 beep(1); // dot();
ChuckTimber 0:27c38e4d6e4e 104 break;
ChuckTimber 0:27c38e4d6e4e 105 case ' ':
ChuckTimber 0:27c38e4d6e4e 106 space(7);
ChuckTimber 0:27c38e4d6e4e 107 break;
ChuckTimber 0:27c38e4d6e4e 108 default:
ChuckTimber 0:27c38e4d6e4e 109 continue;
ChuckTimber 0:27c38e4d6e4e 110 }
ChuckTimber 0:27c38e4d6e4e 111 }
ChuckTimber 0:27c38e4d6e4e 112 space(2);
ChuckTimber 0:27c38e4d6e4e 113 }
ChuckTimber 0:27c38e4d6e4e 114
ChuckTimber 0:27c38e4d6e4e 115 // constructors
ChuckTimber 0:27c38e4d6e4e 116 /** Create a Morse object connected to the specified PwmOut pin and DigitalOut pin
ChuckTimber 0:27c38e4d6e4e 117 *
ChuckTimber 0:27c38e4d6e4e 118 * @param pwm - PwmOut pin to connect to (default dp24)
ChuckTimber 0:27c38e4d6e4e 119 * @param led - DigitalOut pin to connect to (default LED1)
ChuckTimber 0:27c38e4d6e4e 120 * @param t - float t, cw tick (default 0.1sec)
ChuckTimber 0:27c38e4d6e4e 121 * @param f - float f, oscillation frequency (default 800Hz)
ChuckTimber 0:27c38e4d6e4e 122 */
ChuckTimber 0:27c38e4d6e4e 123
ChuckTimber 0:27c38e4d6e4e 124 Morse::Morse() : _pin( LED1 ), _pwm( dp24 )
ChuckTimber 0:27c38e4d6e4e 125 {
ChuckTimber 0:27c38e4d6e4e 126 cw_tick = 0.1;
ChuckTimber 0:27c38e4d6e4e 127 freq = 800;
ChuckTimber 0:27c38e4d6e4e 128 _pwm.period(1.0/freq);
ChuckTimber 0:27c38e4d6e4e 129 _pwm.write(0.0);
ChuckTimber 0:27c38e4d6e4e 130 }
ChuckTimber 0:27c38e4d6e4e 131
ChuckTimber 0:27c38e4d6e4e 132 Morse::Morse(PinName pwm, PinName led) : _pin( led ), _pwm( pwm )
ChuckTimber 0:27c38e4d6e4e 133 {
ChuckTimber 0:27c38e4d6e4e 134 cw_tick = 0.1;
ChuckTimber 0:27c38e4d6e4e 135 freq = 800;
ChuckTimber 0:27c38e4d6e4e 136 _pwm.period(1.0/freq);
ChuckTimber 0:27c38e4d6e4e 137 _pwm.write(0.0);
ChuckTimber 0:27c38e4d6e4e 138 }
ChuckTimber 0:27c38e4d6e4e 139
ChuckTimber 0:27c38e4d6e4e 140 Morse::Morse(PinName pwm, PinName led, float t) : _pin( led ), _pwm( pwm )
ChuckTimber 0:27c38e4d6e4e 141 {
ChuckTimber 0:27c38e4d6e4e 142 cw_tick = t;
ChuckTimber 0:27c38e4d6e4e 143 freq = 800;
ChuckTimber 0:27c38e4d6e4e 144 _pwm.period(1.0/freq);
ChuckTimber 0:27c38e4d6e4e 145 _pwm.write(0.0);
ChuckTimber 0:27c38e4d6e4e 146 }
ChuckTimber 0:27c38e4d6e4e 147
ChuckTimber 0:27c38e4d6e4e 148 Morse::Morse(PinName pwm, PinName led, float t, float f) : _pin( led ), _pwm( pwm )
ChuckTimber 0:27c38e4d6e4e 149 {
ChuckTimber 0:27c38e4d6e4e 150 cw_tick = t;
ChuckTimber 0:27c38e4d6e4e 151 freq = f;
ChuckTimber 0:27c38e4d6e4e 152 _pwm.period(1.0/freq);
ChuckTimber 0:27c38e4d6e4e 153 _pwm.write(0.0);
ChuckTimber 0:27c38e4d6e4e 154 }