Nota
Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
Perché unirti?
Supporto esperto: Risolvi i problemi post-vendita e le sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara e condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.
Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e alle anteprime.
Sconti speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.
Promozioni festive e omaggi: Partecipa a concorsi e promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi!
3.1.10 Generatore di Codice Morse
Introduzione
In questo progetto, realizzeremo un generatore di codice Morse, dove potrai digitare una serie di lettere inglesi nel Raspberry Pi per farle apparire come codice Morse.
Componenti necessari
In questo progetto, abbiamo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
Kit Raphael |
337 |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE COMPONENTE |
LINK PER L’ACQUISTO |
|---|---|
- |
|
Schema elettrico
Nome scheda |
fisico |
wiringPi |
BCM |
GPIO17 |
Pin 11 |
0 |
17 |
GPIO22 |
Pin 15 |
3 |
22 |
Procedure sperimentali
Passo 1: Costruisci il circuito. (Presta attenzione ai poli del cicalino: Quello con l’etichetta + è il polo positivo, l’altro è il negativo.)
Passo 2: Apri il file del codice.
cd ~/raphael-kit/c/3.1.10/
Passo 3: Compila il codice.
gcc 3.1.10_MorseCodeGenerator.c -lwiringPi
Passo 4: Esegui il file eseguibile.
sudo ./a.out
Dopo l’esecuzione del programma, digita una serie di caratteri e il cicalino e il LED invieranno i segnali Morse corrispondenti.
Nota
Se il programma non funziona dopo l’esecuzione o compare il messaggio di errore: «wiringPi.h: No such file or directory», consulta Installazione e verifica di WiringPi.
Spiegazione del codice
struct MORSE{
char word;
unsigned char *code;
};
struct MORSE morseDict[]=
{
{'A',"01"}, {'B',"1000"}, {'C',"1010"}, {'D',"100"}, {'E',"0"},
{'F',"0010"}, {'G',"110"}, {'H',"0000"}, {'I',"00"}, {'J',"0111"},
{'K',"101"}, {'L',"0100"}, {'M',"11"}, {'N',"10"}, {'O',"111"},
{'P',"0110"}, {'Q',"1101"}, {'R',"010"}, {'S',"000"}, {'T',"1"},
{'U',"001"}, {'V',"0001"}, {'W',"011"}, {'X',"1001"}, {'Y',"1011"},
{'Z',"1100"},{'1',"01111"}, {'2',"00111"}, {'3',"00011"}, {'4',"00001"},
{'5',"00000"},{'6',"10000"}, {'7',"11000"}, {'8',"11100"}, {'9',"11110"},
{'0',"11111"},{'?',"001100"}, {'/',"10010"}, {',',"110011"}, {'.',"010101"},
{';',"101010"},{'!',"101011"}, {'@',"011010"}, {':',"111000"}
};
Questa struttura MORSE è il dizionario del codice Morse, contenente caratteri da A a Z, numeri da 0 a 9 e simboli “?” “/” “:” “,” “.” “;” “!” “@” .
char *lookup(char key,struct MORSE *dict,int length)
{
for (int i=0;i<length;i++)
{
if(dict[i].word==key){
return dict[i].code;
}
}
}
La funzione lookup() funziona controllando il dizionario. Definisci un key per
cercare le parole nel dizionario morseDict e restituire il codice corrispondente.
void on(){
digitalWrite(ALedPin,HIGH);
digitalWrite(BeepPin,HIGH);
}
Crea una funzione on() per attivare il cicalino e il LED.
void off(){
digitalWrite(ALedPin,LOW);
digitalWrite(BeepPin,LOW);
}
La funzione off() spegne il cicalino e il LED.
void beep(int dt){
on();
delay(dt);
off();
delay(dt);
}
Definisci una funzione beep() per far emettere suoni e lampeggiare il LED e
il cicalino in un intervallo di dt.
void morsecode(char *code){
int pause = 250;
char *point = NULL;
int length = sizeof(morseDict)/sizeof(morseDict[0]);
for (int i=0;i<strlen(code);i++)
{
point=lookup(code[i],morseDict,length);
for (int j=0;j<strlen(point);j++){
if (point[j]=='0')
{
beep(pause/2);
}else if(point[j]=='1')
{
beep(pause);
}
delay(pause);
}
}
}
La funzione morsecode() viene utilizzata per elaborare il codice Morse dei
caratteri inseriti facendo emettere segnali «1» con suoni o luci lunghi e segnali
«0» con suoni o luci brevi. Ad esempio, inserendo «SOS», ci sarà un segnale con tre
brevi, tre lunghi e poi tre brevi segmenti “ · · · - - - · · · ”.
int toupper(int c)
{
if ((c >= 'a') && (c <= 'z'))
return c + ('A' - 'a');
return c;
}
char *strupr(char *str)
{
char *orign=str;
for (; *str!='\0'; str++)
*str = toupper(*str);
return orign;
}
Prima della codifica, è necessario uniformare le lettere in maiuscolo.
void main(){
setup();
char *code;
int length=8;
code = (char*)malloc(sizeof(char)*length);
while (1){
printf("Please input the messenger:");
scanf("%s",code);
code=strupr(code);
printf("%s\n",code);
morsecode(code);
}
}
Quando inserisci i caratteri con la tastiera, code=strupr(code) convertirà le lettere inserite in maiuscolo.
Printf() quindi stampa il testo chiaro sullo schermo del computer e la funzione morsecod() fa emettere al cicalino e al LED il codice Morse.
Nota che la lunghezza dei caratteri inseriti non deve superare la lunghezza (può essere modificata).
Immagine del fenomeno