Morse code encoder library
morse.cpp@0:27c38e4d6e4e, 2014-07-13 (annotated)
- 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?
User | Revision | Line number | New 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 | } |