#define SPEED (17) //speed in WPM. Default: 16
#define DOTLEN (1200/SPEED)
#define DASHLEN (3*(1200/SPEED))
#define PAUSE 10 //Time in seconds between transmissions
int ledPin=13; //Digital pin used to show when the tone is playing. Pin 13 has an attached led on most Arduino boards.
int tonePin=3; //Digital pin used to send the tone. It MUST be a PWM pin (Marked with ~).
int toneFreq=500; //Tone frequency. Usually between 500 and 900 Hz.
void sendMsg(char*);
void dash();
void dot();
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
Serial.println("Arduino Morse Beacon - by Nicola Salsotto IN3GJH - github.com/NicoVarg99");
Serial.println("modified by Rich k0eb for ARISS camp at the Eaton Library 2022");
Serial.print("\n");
}
void loop()
{
sendMsg("ARISS at the Eaton Library");
Serial.print("DELAY: ");
Serial.print(PAUSE);
Serial.println(" s");
delay(PAUSE*1000);
}
void dash()
{
digitalWrite(ledPin, HIGH);
tone(tonePin, toneFreq);
delay(DASHLEN);
digitalWrite(ledPin, LOW);
noTone(tonePin);
tone(tonePin, 21000);
delay(DOTLEN);
noTone(tonePin);
}
void dot()
{
digitalWrite(ledPin, HIGH) ;
tone(tonePin, toneFreq);
delay(DOTLEN);
digitalWrite(ledPin, LOW);
noTone(tonePin);
tone(tonePin, 21000);
delay(DOTLEN);
noTone(tonePin);
}
void eol()
{
tone(tonePin, 21000);
delay(DOTLEN*2);
noTone(tonePin);
}
void sendMsg(char *str)
{
int i;
tone(tonePin, 21000);
delay(500);
noTone(tonePin);
Serial.print("TX: ");
for(i=0;i<strlen(str);i++)
{
switch (str[i])
{
case 'A':
dot();dash();eol();break;
case 'B':
dash();dot();dot();dot();eol();break;
case 'C':
dash();dot();dash();dot();eol();break;
case 'D':
dash();dot();dot();eol();break;
case 'E':
dot();eol();break;
case 'F':
dot();dot();dash();dot();eol();break;
case 'G':
dash();dash();dot();eol();break;
case 'H':
dot();dot();dot();dot();eol();break;
case 'I':
dot();dot();eol();break;
case 'J':
dot();dash();dash();dash();eol();break;
case 'K':
dash();dot();dash();eol();break;
case 'L':
dot();dash();dot();dot();eol();break;
case 'M':
dash();dash();eol();break;
case 'N':
dash();dot();eol();break;
case 'O':
dash();dash();dash();eol();break;
case 'P':
dot();dash();dash();dot();eol();break;
case 'Q':
dash();dash();dot();dash();eol();break;
case 'R':
dot();dash();dot();eol();eol();break;
case 'S':
dot();dot();dot();eol();break;
case 'T':
dash();eol();break;
case 'U':
dot();dot();dash();eol();break;
case 'V':
dot();dot();dot();dash();eol();break;
case 'W':
dot();dash();dash();eol();break;
case 'X':
dash();dot();dot();dash();eol();break;
case 'Y':
dash();dot();dash();dash();eol();break;
case 'Z':
case 'z':
dash();dash();dot();dot();eol();break;
case ' ':
tone(tonePin, 21000);
delay(DOTLEN*5);
noTone(tonePin);
break;
case '.':
dot();dash();dot();dash();dot();dash();eol();break;
case ',':
dash();dash();dot();dot();dash();dash();eol();break;
case ':':
dash();dash();dash();dot();dot();eol();break;
case '?':
dot();dot();dash();dash();dot();dot();eol();break;
case '\'':
dot();dash();dash();dash();dash();dot();eol();break;
case '-':
dash();dot();dot();dot();dot();dash();eol();break;
case '/':
dash();dot();dot();dash();dot();eol();break;
case '(':
case ')':
dash();dot();dash();dash();dot();dash();eol();break;
case '\"':
dot();dash();dot();dot();dash();dot();eol();break;
case '@':
dot();dash();dash();dot();dash();dot();eol();break;
case '=':
dash();dot();dot();dot();dash();eol();break;
case '0':
dash();dash();dash();dash();dash();eol();break;
case '1':
dot();dash();dash();dash();dash();eol();break;
case '2':
dot();dot();dash();dash();dash();eol();break;
case '3':
dot();dot();dot();dash();dash();eol();break;
case '4':
dot();dot();dot();dot();dash();eol();break;
case '5':
dot();dot();dot();dot();dot();eol();break;
case '6':
dash();dot();dot();dot();dot();eol();break;
case '7':
dash();dash();dot();dot();dot();eol();break;
case '8':
dash();dash();dash();dot();dot();eol();break;
case '9':
dash();dash();dash();dash();dot();eol();break;
}
Serial.print(str[i]);
delay(DOTLEN*2);
}
Serial.print("\n");
}