Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int buzzerPin = 13;
- const int ledPin = 13;
- // tone frequency C
- const int tonefreq = 523;
- // constants for tone and rest durations
- const int dotlength = 100;
- const int dashlength = dotlength * 3;
- // inter-element gap - between each dot or dash of a letter
- const int inter = dotlength;
- // letter gap is 3 dots - the inter gap is always added - so this is one fewer
- const int lgap = dotlength * 2; // inter-letter gap
- // word gap is 7 dots - with letter and inter gap already counted, this is -1
- const int wgap = dotlength * 4; //inter-word gap
- const int sos = 7; // SOS button
- bool sause = false;
- char command[sizeof(int)] = "";
- void append(char* s, char c) {
- int len = strlen(s);
- s[len] = c;
- s[len+1] = '\0';
- }
- void setup()
- {
- pinMode(buzzerPin, OUTPUT);
- pinMode(ledPin, OUTPUT);
- pinMode(sos, INPUT);
- Serial.begin(9600);
- }
- void loop()
- {
- char thischar;
- if (Serial.available())
- {
- // read a single character
- thischar = Serial.read();
- append(command,thischar);
- if (thischar == '=') {
- sause = true;
- goto exitjmp;
- }
- if (thischar>='a' && thischar<='z')
- {
- // convert to upper case
- thischar = thischar -32;
- }
- // swap for a space if not in A-Z
- if(thischar<65 || thischar>90)
- {
- thischar=' ';
- }
- soundLetter(thischar);
- Serial.println(thischar);
- delay(lgap);
- exitjmp:
- printf("");
- } else if (digitalRead(sos) == HIGH) {
- sause = true;
- } else if (sause) {
- Serial.println("Sending SOS Message...");
- for (int i = 0; i < 5; i++) {
- soundLetter('S');
- delay(lgap);
- soundLetter('O');
- delay(lgap);
- }
- Serial.println("Starting Beacon...");
- while (true) {
- if (digitalRead(sos) == HIGH || sause == false) {
- Serial.println("Stopping Beacon.");
- delay(500);
- sause = false;
- break;
- }
- if (Serial.available()) {
- int charr = Serial.read();
- if (charr == "=") {
- sause = false;
- }
- }
- tone(buzzerPin,tonefreq,500);
- delay(1000);
- }
- }
- }
- void dot()
- {
- // play a dot
- tone(buzzerPin, tonefreq);
- // LED
- digitalWrite(ledPin, HIGH);
- delay(dotlength);
- noTone(buzzerPin);
- // LED
- digitalWrite(ledPin, LOW);
- delay(inter);
- }
- void dash()
- {
- // play a dash
- tone(buzzerPin, tonefreq);
- // LED
- digitalWrite(ledPin, HIGH);
- delay(dashlength);
- noTone(buzzerPin);
- // LED
- digitalWrite(ledPin, LOW);
- delay(inter);
- }
- void soundLetter(char letter)
- {
- // letters are in order of frequency
- switch(letter)
- {
- case 'E':
- dot();
- return;
- case 'T':
- dash();
- return;
- case 'A':
- dot();
- dash();
- return;
- case 'O':
- dash();
- dash();
- dash();
- return;
- case 'I':
- dot();
- dot();
- return;
- case 'N':
- dash();
- dot();
- return;
- case 'S':
- dot();
- dot();
- dot();
- return;
- case 'H':
- dot();
- dot();
- dot();
- dot();
- return;
- case 'R':
- dot();
- dash();
- dot();
- return;
- case 'D':
- dash();
- dot();
- dot();
- return;
- case 'L':
- dot();
- dash();
- dot();
- dot();
- return;
- case 'C':
- dash();
- dot();
- dash();
- dot();
- return;
- case 'U':
- dot();
- dot();
- dash();
- return;
- case 'M':
- dash();
- dash();
- return;
- case 'W':
- dot();
- dash();
- dash();
- return;
- case 'F':
- dot();
- dot();
- dash();
- dot();
- return;
- case 'G':
- dash();
- dash();
- dot();
- return;
- case 'Y':
- dash();
- dot();
- dash();
- dash();
- return;
- case 'P':
- dot();
- dash();
- dash();
- dot();
- return;
- case 'B':
- dash();
- dot();
- dot();
- dot();
- return;
- case 'V':
- dot();
- dot();
- dot();
- dash();
- return;
- case 'K':
- dash();
- dot();
- dash();
- return;
- case 'J':
- dot();
- dash();
- dash();
- dash();
- return;
- case 'X':
- dash();
- dot();
- dot();
- dash();
- return;
- case 'Q':
- dash();
- dash();
- dot();
- dash();
- return;
- case 'Z':
- dash();
- dash();
- dot();
- dot();
- return;
- case ' ':
- delay(wgap);
- return;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement