SOS

Dependencies:   mbed

Committer:
eencae
Date:
Wed Feb 22 14:14:17 2017 +0000
Revision:
0:c0996e3989ce
Initial commit.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 0:c0996e3989ce 1 /* Morse Code
eencae 0:c0996e3989ce 2
eencae 0:c0996e3989ce 3 (c) Dr Craig A. Evans, University of Leeds
eencae 0:c0996e3989ce 4
eencae 0:c0996e3989ce 5 A dot is 1 time unit
eencae 0:c0996e3989ce 6 A dash is 3 time units
eencae 0:c0996e3989ce 7 Space between parts of a letter is 1 unit
eencae 0:c0996e3989ce 8 Space between letters is 3 units
eencae 0:c0996e3989ce 9 Space between words is 7 units
eencae 0:c0996e3989ce 10
eencae 0:c0996e3989ce 11 */
eencae 0:c0996e3989ce 12
eencae 0:c0996e3989ce 13 #include "mbed.h"
eencae 0:c0996e3989ce 14
eencae 0:c0996e3989ce 15 DigitalOut red_led(p24);
eencae 0:c0996e3989ce 16 DigitalOut green_led(p23);
eencae 0:c0996e3989ce 17 DigitalOut blue_led(p22);
eencae 0:c0996e3989ce 18
eencae 0:c0996e3989ce 19 void init_leds();
eencae 0:c0996e3989ce 20 void dot();
eencae 0:c0996e3989ce 21 void dash();
eencae 0:c0996e3989ce 22 void morse_s();
eencae 0:c0996e3989ce 23 void morse_o();
eencae 0:c0996e3989ce 24 void sos();
eencae 0:c0996e3989ce 25
eencae 0:c0996e3989ce 26 // global variable for unit time in milli-seconds
eencae 0:c0996e3989ce 27 int g_time_unit_ms = 150;
eencae 0:c0996e3989ce 28
eencae 0:c0996e3989ce 29 int main()
eencae 0:c0996e3989ce 30 {
eencae 0:c0996e3989ce 31 init_leds();
eencae 0:c0996e3989ce 32
eencae 0:c0996e3989ce 33 while(1) {
eencae 0:c0996e3989ce 34 sos();
eencae 0:c0996e3989ce 35 wait_ms(7*g_time_unit_ms); // space between words is 7 units
eencae 0:c0996e3989ce 36 }
eencae 0:c0996e3989ce 37 }
eencae 0:c0996e3989ce 38
eencae 0:c0996e3989ce 39 // LEDs are active low and so writing a 1 turns them off
eencae 0:c0996e3989ce 40 void init_leds()
eencae 0:c0996e3989ce 41 {
eencae 0:c0996e3989ce 42 red_led.write(1);
eencae 0:c0996e3989ce 43 green_led.write(1);
eencae 0:c0996e3989ce 44 blue_led.write(1);
eencae 0:c0996e3989ce 45 }
eencae 0:c0996e3989ce 46
eencae 0:c0996e3989ce 47 void dot()
eencae 0:c0996e3989ce 48 {
eencae 0:c0996e3989ce 49 red_led.write(0); // turn LED on
eencae 0:c0996e3989ce 50 wait_ms(g_time_unit_ms); // wait for 1 time unit
eencae 0:c0996e3989ce 51 red_led.write(1); // turn LED off
eencae 0:c0996e3989ce 52 }
eencae 0:c0996e3989ce 53
eencae 0:c0996e3989ce 54 void dash()
eencae 0:c0996e3989ce 55 {
eencae 0:c0996e3989ce 56 red_led.write(0); // turn LED on
eencae 0:c0996e3989ce 57 wait_ms(3*g_time_unit_ms); // A dash is 3 time units
eencae 0:c0996e3989ce 58 red_led.write(1); // turn LED off
eencae 0:c0996e3989ce 59 }
eencae 0:c0996e3989ce 60
eencae 0:c0996e3989ce 61 void morse_s() { // ...
eencae 0:c0996e3989ce 62 dot();
eencae 0:c0996e3989ce 63 wait_ms(g_time_unit_ms); // space between parts of a letter is 1 unit
eencae 0:c0996e3989ce 64 dot();
eencae 0:c0996e3989ce 65 wait_ms(g_time_unit_ms);
eencae 0:c0996e3989ce 66 dot();
eencae 0:c0996e3989ce 67 }
eencae 0:c0996e3989ce 68
eencae 0:c0996e3989ce 69 void morse_o() { // ---
eencae 0:c0996e3989ce 70 dash();
eencae 0:c0996e3989ce 71 wait_ms(g_time_unit_ms); // space between parts of a letter is 1 unit
eencae 0:c0996e3989ce 72 dash();
eencae 0:c0996e3989ce 73 wait_ms(g_time_unit_ms);
eencae 0:c0996e3989ce 74 dash();
eencae 0:c0996e3989ce 75 }
eencae 0:c0996e3989ce 76
eencae 0:c0996e3989ce 77 void sos() { // ... --- ...
eencae 0:c0996e3989ce 78 morse_s();
eencae 0:c0996e3989ce 79 wait_ms(3*g_time_unit_ms); // space between letters is 3 units
eencae 0:c0996e3989ce 80 morse_o();
eencae 0:c0996e3989ce 81 wait_ms(3*g_time_unit_ms); // space between letters is 3 units
eencae 0:c0996e3989ce 82 morse_s();
eencae 0:c0996e3989ce 83 }