Beacon con arduino


Beacon con arduino

Non è farina del mio sacco, ho modificato un programma scritto da Nicola Salsotto IN3GJH.

Insieme a mio marito ho  apportato importanti modifiche in modo che dal valore WPM si possa ottenere direttamente il "peso" dei punti e delle linee.

Funziona in questo modo:
Trasmissione messaggio , 2 secondi pausa, trasmissione portante di 30 secondi
Pausa 10 secondi
Trasmissione messaggio , 2 secondi pausa, trasmissione portante di 30 secondi
Pausa 5 minuti

Inizia nuovamente il ciclo

Le uniche cose da modificare  sono:
- Valore WPM
- SendMsg nelle due stringhe in void loop()
- Eventualmente il delay 30000 per la portante di 30 secondi , sempre in void loop()

#define WPM  (60) //Velocità caratteri/minuto (adattare alle necessità)
#define SPEED (9800/WPM) // adattamento WPM alla velocità baud Rate
#define NDOT (SPEED*38) //numero dei punti totali alla parola PARIS x velocità
#define DOTLEN  (NDOT/60) // durata punti riferiti al minuto
#define DASHLEN  (3*DOTLEN) // durata linee
#define PAUSE 10 //pausa in secondi tra le transmissioni

int ledPin=13; //Pin Digitale usato per mostrare quando un tono è in riproduzione (possibilità di utilizzarlo come keyer)
int tonePin=3; //Pin Digitale usato per tono in altoparlante.
int toneFreq=600; //Frequenza del tono.

void sendMsg(char*);
void dash();
void dot();

void setup()
{
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  Serial.println("Arduino Morse Beacon");
  Serial.println("Written by Nicola Salsotto IN3GJH, modified by Ercole Pizzo IU8JOL");
  Serial.print("\n");
}

void loop()
{
  sendMsg("IU8JOL/B BT LOCATOR JN71ON BT POWER PWR 2 WATT ERP BT ABOVE SEA LEVEL 650 METERS BT AR"); //Modificare con il vostro messaggio.
  Serial.print("DELAY: ");//Interfaccia per il monitor.
  Serial.print(PAUSE);
  Serial.println(" s");
  delay(2000);             //Ritardo di 2 secondi tra fine messaggio e inizio portante.
  digitalWrite(ledPin, HIGH);          //Inizio portante sul led/keyer.
  tone(tonePin, toneFreq);            //Inizio portante sull'altoparlante.
  delay(30000);                      //Durata portante in millisecondi.
  digitalWrite(ledPin, LOW);        //Fine portante al led/keyer.
  noTone(tonePin);                 //Assegnazione tono al pin 3.
  tone(tonePin, 21000);
  delay(30000);                   //Durata portante sull'altoparlante.
  noTone(tonePin);
  delay(PAUSE*1000);             //Pausa di 10 secondi tra i due messaggi.
  
  sendMsg("IU8JOL/B BT LOCATOR JN71ON BT POWER PWR 2 WATT ERP BT ABOVE SEA LEVEL 650 METERS BT AR"); //Remember to replace it with your callsign/message!
  Serial.print("DELAY: ");
  Serial.print(PAUSE);
  Serial.println(" s");
  delay(2000);
  digitalWrite(ledPin, HIGH);
  tone(tonePin, toneFreq);
  delay(30000);
  digitalWrite(ledPin, LOW);
  noTone(tonePin);
  tone(tonePin, 21000);
  delay(30000);
  noTone(tonePin);
  delay(5*60000);        //Pausa di 5 minuti per riposo Beacon.
}


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 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();break;
    case 'B':
      dash();dot();dot();dot();break;
    case 'C':
      dash();dot();dash();dot();break;
    case 'D':
      dash();dot();dot();break;
    case 'E':
      dot();break;
    case 'F':
      dot();dot();dash();dot();break;
    case 'G':
      dash();dash();dot();break;
    case 'H':
      dot();dot();dot();dot();break;
    case 'I':
      dot();dot();break;
    case 'J':
      dot();dash();dash();dash();break;
    case 'K':
      dash();dot();dash();break;
    case 'L':
      dot();dash();dot();dot();break;
    case 'M':
      dash();dash();break;
    case 'N':
      dash();dot();break;
    case 'O':
      dash();dash();dash();break;
    case 'P':
      dot();dash();dash();dot();break;
    case 'Q':
      dash();dash();dot();dash();break;
    case 'R':
      dot();dash();dot();break;
    case 'S':
      dot();dot();dot();break;
    case 'T':
      dash();break;
    case 'U':
      dot();dot();dash();break;
    case 'V':
      dot();dot();dot();dash();break;
    case 'W':
      dot();dash();dash();break;
    case 'X':
      dash();dot();dot();dash();break;
    case 'Y':
      dash();dot();dash();dash();break;
    case 'Z':
      dash();dash();dot();dot();break;
    case ' ':
      tone(tonePin, 21000);
      delay(DOTLEN*5);
      noTone(tonePin);
      break;
    case '.':
      dot();dash();dot();dash();dot();dash();break;
    case ',':
      dash();dash();dot();dot();dash();dash();break;
    case ':':
      dash();dash();dash();dot();dot();break;
    case '?':
      dot();dot();dash();dash();dot();dot();break;
    case '\'':
      dot();dash();dash();dash();dash();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();dash();dot();dot();dash();dot();break;
    case '@':
      dot();dash();dash();dot();dash();dot();break;
    case '=':
      dash();dot();dot();dot();dash();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;

    }
    Serial.print(str[i]);
    delay(2*DOTLEN);
  }
  Serial.print("\n");
}

Nessun commento:

Posta un commento