asteroidsteam icon

asdf

asteroidsteam | PRO | 06/15/19 06:02:32 PM UTC | 0 ⭐ | 478 👁️ | Never ⏰ | []
C |

4.37 KB

|

None

|

0 👍

/

0 👎

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; 
  }
}

Comments