Foto 1: il modulo beacon su Arduino Nano; |
Beacon selezionabile - 5 banchi di memoria.
Questo identificatore telegrafico trasmette una nota di bassa frequenza, direttamente ricevibile con Apparati in AM o FM a banda stretta.
I messaggi impostati per la radiocaccia sono MO1... MO5, selezionabili a piacere.
La selezione del beacon si opera mettendo a massa, con un dip-switch, il piedino associato (beaconsetX).
In questo caso, la selezione della memoria può essere fatta anche "a caldo", senza bisogno di resettare il modulo. Viene terminato il beacon in riproduzione ed inserito in loop il nuovo beacon.
La temporizzazione è calcolata in modo da avere sempre un rapporto 1-3-5, come da standard del codice Morse.
/* --------------- Inizio programma --------------------------
Achille De Santis V2.0 del 12-12-2014 V3.0 del 13-12-2015
Beacon RDF CW Multiplo, con 5 messaggi pre-selezionabili.
1 linea di uscita per il comando di PTT
1 linea di uscita per il testo CW_BF
5 testi beacon, in uscita, selezionabili alternativamente;
il pin 13 è l'uscita del testo beacon;
il pin 12 è il comando di PTT.
*/
// --------------------------- I/O ------------------------------------------
#define pin 13 // Uscita testo beacon sul piedino 13.
#define ptt 12 // comando ptt sul piedino 12.
#define beaconset1 11
#define beaconset2 10
#define beaconset3 9
#define beaconset4 8
#define beaconset5 7
// ------------------------------------------------------------------------
const int T = 100; // Definizione costante base tempi T.
const int T3=3*T;
const int T4=4*T;
const int T10=10*T;
const int freq = 1000;
void genera(int T1)
{
tone(pin, freq); delay(T1);
noTone(pin); delay(T);
}
void punto() { genera(T); }
void linea() { genera(T3); }
void MO()
{
linea(); linea(); delay (4*T); // M
linea(); linea(); linea(); delay (4*T); // O
}
void beacon1() { MO(); punto(); linea(); linea(); linea(); linea(); delay (T4); } //MO1
void beacon2() { MO(); punto(); punto(); linea(); linea(); linea(); delay (T4); } //MO2
void beacon3() { MO(); punto(); punto(); punto(); linea(); linea(); delay (T4); } //MO3
void beacon4() { MO(); punto(); punto(); punto(); punto(); linea(); delay (T4); } //MO4
void beacon5() { MO(); punto(); punto(); punto(); punto(); punto(); delay (T4); } //MO5
void setup()
{
pinMode(pin, OUTPUT); //Variabile di uscita tono
pinMode(ptt, OUTPUT); //Variabile di uscita PTT
pinMode(beaconset1, INPUT_PULLUP);
pinMode(beaconset2, INPUT_PULLUP);
pinMode(beaconset3, INPUT_PULLUP);
pinMode(beaconset4, INPUT_PULLUP);
pinMode(beaconset5, INPUT_PULLUP);
}
void loop()
{ digitalWrite(ptt, 1); delay (T); // attiva PTT
if (digitalRead(beaconset1)==0) { beacon1(); // delay (T3); }
else if (digitalRead(beaconset2)==0) { beacon2(); // delay (T3); }
else if (digitalRead(beaconset3)==0) { beacon3(); // delay (T3); }
else if (digitalRead(beaconset4)==0) { beacon4(); // delay (T3); }
else if (digitalRead(beaconset5)==0) {beacon5(); // delay (T3); }
digitalWrite(ptt, 0); // disattiva PTT
delay (T10);
}
// ---------------- Fine programma ---------------------------------
Nota: inserendo il comando di "portante" all'interno del beacon scelto si evita di far partire la trasmissione se non c'è alcun messaggio beacon selezionato.
In questo modo si ha anche una indicazione, sullo stesso LED, dell'attivazione di un qualunque messaggio beacon. Nel primo caso, comandando la portante "a priori" e non selezionando lo specifico messaggio si avrebbe l'emissione della sola portante non modulata (che può avere comunque un significato, n.d.a.).
In questo modo si ha anche una indicazione, sullo stesso LED, dell'attivazione di un qualunque messaggio beacon. Nel primo caso, comandando la portante "a priori" e non selezionando lo specifico messaggio si avrebbe l'emissione della sola portante non modulata (che può avere comunque un significato, n.d.a.).
Simulazione:
Beacon per ARDF - selezionabileEsempio di beacon modulato in BF
Argomenti correlati:
Arduino N° 4 - Beacon CW modulato in BF> Arduino N° 13
Nessun commento:
Posta un commento