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.

../_images/3.1.10.png

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Kit Raphael

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE COMPONENTE

LINK PER L’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

LED

ACQUISTA

Cicalino

-

Transistor

ACQUISTA

Schema elettrico

Nome scheda

fisico

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO22

Pin 15

3

22

../_images/Schematic_three_one11.png

Procedure sperimentali

Passo 1: Costruisci il circuito. (Presta attenzione ai poli del cicalino: Quello con l’etichetta + è il polo positivo, l’altro è il negativo.)

../_images/image269.png

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

../_images/image270.jpeg