//Morse code. Accepts input over serial, and echoes it to an LED on pin 13. int pin = 13, //LED Pin. //Times are in ms. ditOn = 100, dahOn = ditOn*3, //Time to spend on in a dah total = 800; //Time per beat (off = total - on) String text = ""; void setup() { pinMode(pin, OUTPUT); Serial.begin(9600); //9600 baud connection. WOO HIGH SPEED!!! } void loop() { //There's data to be read. Read it. while (Serial.available() > 0) { text += char(Serial.read()); } Serial.println(text); //No new data. Loop over current phrase. while (!text.equals("")) { for (int i = 0; i < text.length(); i++) { morse(text.charAt(i)); //Break out as soon as possible when new data arrives. if (Serial.available() > 0) text = ""; } } } //Converts void morse(char ch) { //Yes. A switch statement is really, really ugly. But also easy, and it works. switch (ch) { case 'a': dit(); dah(); pause(); break; case 'b': dah(); dit(); dit(); dit(); pause(); break; case 'c': dah(); dit(); dah(); dit(); pause(); break; case 'd': dah(); dit(); dit(); pause(); break; case 'e': dit(); pause(); break; case 'f': dit(); dit(); dah(); dit(); pause(); break; case 'g': dah(); dah(); dit(); pause(); break; case 'h': dit(); dit(); dit(); dit(); pause(); break; case 'i': dit(); dit(); pause(); break; case 'j': dit(); dah(); dah(); dah(); pause(); break; case 'k': dah(); dit(); dah(); pause(); break; case 'l': dit(); dah(); dit(); dit(); pause(); break; case 'm': dah(); dah(); pause(); break; case 'n': dah(); dit(); pause(); break; case 'o': dah(); dah(); dah(); pause(); break; case 'p': dit(); dah(); dah(); dit(); pause(); break; case 'q': dah(); dah(); dit(); dah(); pause(); break; case 'r': dit(); dah(); dit(); pause(); break; case 's': dit(); dit(); dit(); pause(); break; case 't': dah(); pause(); break; case 'u': dit(); dit(); dah(); pause(); break; case 'v': dit(); dit(); dit(); dah(); pause(); break; case 'w': dit(); dah(); dah(); pause(); break; case 'x': dah(); dit(); dit(); dah(); pause(); break; case 'y': dah(); dit(); dah(); dah(); pause(); break; case 'z': dah(); dah(); dit(); dit(); pause(); break; } } void dit() { digitalWrite(pin, HIGH); delay(ditOn); digitalWrite(pin, LOW); delay(total - ditOn); } void dah() { digitalWrite(pin, HIGH); delay(dahOn); digitalWrite(pin, LOW); delay(total - dahOn); } //Extra delay between characters. void pause() { delay(200); }