This is a simple class written to flash out morse code. It can be used to flash out data from the terminal or from a buffer

Revision:
0:c3c4f0cd78cd
diff -r 000000000000 -r c3c4f0cd78cd MorseCode.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MorseCode.cpp	Wed Sep 18 16:27:24 2013 +0000
@@ -0,0 +1,132 @@
+#include "mbed.h"
+#include "MorseCode.h"
+float unit = .005;
+
+const char Letters[37][7] = {
+										{2,1,0}, //a
+										{4,0,1,1,1},//b
+										{4,0,1,0,1},//c
+										{3,0,1,1},//d
+										{1,1},//e
+										{4,1,1,0,1},//f
+										{3,0,0,1},//g
+										{4,1,1,1,1},//h
+										{2,1,1},//i
+										{4,1,0,0,0},//j
+										{3,0,1,0},//k
+										{4,1,0,1,1},//l
+										{2,0,0},//m
+										{2,0,1},//n
+										{3,0,0,0},//o
+										{4,1,0,0,1},//p
+										{4,0,0,1,0},//q
+										{3,1,0,1},//r
+										{3,1,1,1},//s
+										{1,0},//t
+										{3,1,1,0},//u
+										{4,1,1,1,0},//v
+										{3,1,0,0},//w
+										{4,0,1,1,0},//x
+										{4,0,1,0,0},//y
+										{4,0,0,1,1},//z
+										{5,0,0,0,0,0},//0
+										{5,1,0,0,0,0},//1
+										{5,1,1,0,0,0},//2
+										{5,1,1,1,0,0},//3
+										{5,1,1,1,1,0},//4
+										{5,1,1,1,1,1},//5
+										{5,0,1,1,1,1},//6
+										{5,0,0,1,1,1},//7
+										{5,0,0,0,1,1},//8
+										{5,0,0,0,0,1},//9	
+										{0}//space
+};
+
+
+ MorseCode::MorseCode(PinName pin): _pin(pin) //Constructor
+ {    
+   
+ }
+ 
+float MorseCode::get_unit()
+{
+	return (unit);
+}
+void MorseCode::set_unit(float secs)
+{
+	unit = secs;
+}
+
+void MorseCode::blink_buffer (unsigned char* Pbuffer)  //Blink out String
+{
+	unsigned char next_letter;
+	unsigned int i=0;
+	while (Pbuffer[i] !=  0)
+	{
+				next_letter = Pbuffer[i];
+        Print_ASCII_Char(next_letter);	
+				i++;	
+	}
+}
+
+
+void MorseCode::blink_letter (unsigned int letter)  //Blink out a single Ascii letter
+{
+	if(letter == 36)
+	{
+		wait(unit*4);  //space between words (3 + 4 = 7 units)
+	}
+	for(int i = 1; i<(int)((Letters[letter][0])+1);i++)
+	{
+		if(Letters[letter][i])
+		{
+			Dot();
+		}
+		else
+		{
+			Dash();
+		}
+	}
+	wait(unit*3);  //space between letters
+}
+
+void MorseCode::Dot()  //Sets Blink Duration for Dot
+{
+	_pin=1;
+	wait (unit);
+	_pin = 0;
+	wait (unit);
+}
+
+void MorseCode::Dash()  //Sets Blink Duration for Dash
+{
+	_pin =1;
+	wait ((unit * 3.0));
+	_pin = 0;
+	wait (unit);
+}
+
+bool MorseCode::Print_ASCII_Char(unsigned char letter)  //Determines if the ASCII value is valid and it calls blink_letter with the correct char value Upper/Lower/Numbers/Space
+{
+	if(letter >= 0x61  && letter <= 0x7a)
+	{
+		 blink_letter(letter-0x61);    // it is lowercase
+	}
+	else if(letter >= 0x41 && letter <= 0x5a)  
+	{
+		 blink_letter(letter-0x41);  // it is in caps
+	}
+	else if (letter >= 0x30 && letter <= 0x39)
+	{
+		 blink_letter(letter-0x22 );  // it is a number
+	}
+	else if (letter == 0x20)
+	{
+		 blink_letter(36); //it is a space
+	}
+	else
+	{
+		return(false);
+	}
+	return(true);
+}