/* * morse.pde * Eric Ayars * * Code for an Arduino/ATtiny85 morse code messager * */ #define OUTLINE 4 #define DOTLENGTH 120 // All timing is based on this time. Lower for faster code. char message[] = "SOS The moon rover has broken down and I am stuck in the trash can in the garden shed."; void dot() { // Make a dot signal digitalWrite(OUTLINE, HIGH); delay(DOTLENGTH); digitalWrite(OUTLINE, LOW); delay(DOTLENGTH); } void dash() { // Make a dash signal digitalWrite(OUTLINE, HIGH); delay(3*DOTLENGTH); digitalWrite(OUTLINE, LOW); delay(DOTLENGTH); } void letterBreak() { // The break between letters is 3x(dot length). // One dot length comes automatically at the end of // the previous dot or dash, so 2 more are needed. delay(2*DOTLENGTH); } void wordBreak() { // The break between words is 4x(dot length). // Three come for free since a letter just ended, // so 4 more are needed. delay(4*DOTLENGTH); } void send(char letter) { // Sends the given letter to the output switch (letter) { case 'A': case 'a': dot(); dash(); break; case 'B': case 'b': dash(); dot(); dot(); dot(); break; case 'C': case 'c': dash(); dot(); dash(); dot(); break; case 'D': case 'd': dash(); dot(); dot(); break; case 'E': case 'e': dot(); break; case 'F': case 'f': dot(); dot(); dash(); dot(); break; case 'G': case 'g': dash(); dash(); dot(); break; case 'H': case 'h': dot(); dot(); dot(); dot(); break; case 'I': case 'i': dot(); dot(); break; case 'J': case 'j': dot(); dash(); dash(); dash(); break; case 'K': case 'k': dash(); dot(); dash(); break; case 'L': case 'l': dot(); dash(); dot(); dot(); break; case 'M': case 'm': dash(); dash(); break; case 'N': case 'n': dash(); dot(); break; case 'O': case 'o': dash(); dash(); dash(); break; case 'P': case 'p': dot(); dash(); dash(); dot(); break; case 'Q': case 'q': dash(); dash(); dot(); dash(); break; case 'R': case 'r': dot(); dash(); dot(); break; case 'S': case 's': dot(); dot(); dot(); break; case 'T': case 't': dash(); break; case 'U': case 'u': dot(); dot(); dash(); break; case 'V': case 'v': dot(); dot(); dot(); dash(); break; case 'W': case 'w': dot(); dash(); dash(); break; case 'X': case 'x': dash(); dot(); dot(); dash(); break; case 'Y': case 'y': dash(); dot(); dash(); dash(); break; case 'Z': case 'z': dash(); dash(); dot(); dot(); break; case '0': dash(); dash(); dash(); dash(); dash(); break; case '1': dot(); dash(); dash(); dash(); dash(); break; case '2': dot(); dot(); dash(); dash(); dash(); break; case '3': dot(); dot(); dot(); dash(); dash(); break; case '4': dot(); dot(); dot(); dot(); dash(); break; case '5': dot(); dot(); dot(); dot(); dot(); break; case '6': dash(); dot(); dot(); dot(); dot(); break; case '7': dash(); dash(); dot(); dot(); dot(); break; case '8': dash(); dash(); dash(); dot(); dot(); break; case '9': dash(); dash(); dash(); dash(); dot(); break; case ',': dash(); dash(); dot(); dot(); dash(); dash(); break; case '.': dot(); dash(); dot(); dash(); dot(); dash(); break; case '?': dot(); dot(); dash(); dash(); dot(); dot(); break; case ';': dash(); dot(); dash(); dot(); dash(); dot(); break; case '\'': dash(); dash(); dash(); dot(); dot(); dot(); break; case '-': dash(); dot(); dot(); dot(); dot(); dash(); break; case '/': dash(); dot(); dot(); dash(); dot(); break; case '(': case ')': dash(); dot(); dash(); dash(); dot(); dash(); break; case '_': dot(); dot(); dash(); dash(); dot(); dash(); break; case ' ': wordBreak(); break; } letterBreak(); } void setup() { pinMode(OUTLINE, OUTPUT); } void loop() { delay(3000); // three second delay before (and between). for (byte j=0; j<sizeof(message); j++) { send(message[j]); // Send each character in the message. } }