.. note::
Ciao! Benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Esplora pi霉 a fondo il mondo di Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
**Perch茅 unirti?**
- **Supporto Esperto**: Risolvi problematiche post-vendita e sfide tecniche con l'aiuto del nostro team e della community.
- **Impara e Condividi**: Scambia consigli e tutorial per migliorare le tue competenze.
- **Anteprime Esclusive**: Ottieni accesso anticipato alle novit脿 sui prodotti e anticipazioni.
- **Sconti Speciali**: Approfitta di sconti esclusivi sui nostri ultimi prodotti.
- **Promozioni e Giveaway Festivi**: Partecipa a giveaway e promozioni durante le festivit脿.
馃憠 Sei pronto a esplorare e creare con noi? Clicca [|link_sf_facebook|] e unisciti oggi stesso!
3.1.11 Generatore di Codice Morse
===================================
Introduzione
-----------------
In questa lezione, realizzeremo un generatore di codice Morse, dove puoi
digitare una serie di lettere in inglese sul Raspberry Pi per farle apparire
come codice Morse.
Componenti
---------------
.. image:: img/3.1.10.png
:align: center
Schema Elettrico
-----------------------
============ ======== ======== ===
T-Board Name physical wiringPi BCM
GPIO17 Pin 11 0 17
GPIO22 Pin 15 3 22
============ ======== ======== ===
.. image:: img/Schematic_three_one11.png
:align: center
Procedure Sperimentali
----------------------------
**Passo 1:** Costruisci il circuito. (Presta attenzione ai poli del
buzzer: il polo positivo 猫 contrassegnato con +, l'altro 猫 il polo negativo.)
.. image:: img/image269.png
:width: 800
**Per Utenti Linguaggio C**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**Passo 2**: Apri il file del codice.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/c/3.1.11/
**Passo 3**: Compila il codice.
.. raw:: html
.. code-block::
gcc 3.1.11_MorseCodeGenerator.c -lwiringPi
**Passo 4**: Esegui il file eseguibile sopra.
.. raw:: html
.. code-block::
sudo ./a.out
Dopo l'avvio del programma, digita una serie di caratteri e il
buzzer e il LED invieranno i segnali corrispondenti in codice Morse.
.. note::
Se il programma non funziona dopo l'esecuzione o compare un messaggio di errore: \"wiringPi.h: File o directory non trovato\", consulta :ref:`faq_c_nowork`.
**Spiegazione del Codice**
.. code-block:: c
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, che contiene i
caratteri da A-Z, i numeri 0-9 e i simboli \"?\" \"/\" \":\" \",\" \".\" \";\" \"!\" \"@\".
.. code-block:: c
char聽*lookup(char聽key,struct聽MORSE聽*dict,int聽length)
{
聽聽聽聽for聽(int聽i=0;i=聽'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 convertire tutte le lettere in maiuscole.
.. code-block:: c
void聽main(){
聽聽聽聽setup();
聽聽聽聽char聽*code;
聽聽聽聽int聽length=8;
聽聽聽聽code聽=聽(char*)malloc(sizeof(char)*length);
聽聽聽聽while聽(1){
聽聽聽聽聽聽聽聽printf("Please聽input聽the聽messenger:");
delay(100);
聽聽聽聽聽聽聽聽scanf("%s",code);
聽聽聽聽聽聽聽聽code=strupr(code);
聽聽聽聽聽聽聽聽printf("%s\n",code);
delay(100);
聽聽聽聽聽聽聽聽morsecode(code);
聽聽聽聽}
}
Quando digiti i caratteri con la tastiera, code = strupr(code) converte
le lettere inserite in maiuscole.
La funzione Printf() stampa quindi il testo chiaro sullo schermo, e la
funzione morsecod() fa s矛 che il buzzer e il LED emettano il codice Morse.
Nota: la lunghezza del carattere in input non deve superare il valore
di **length** (pu貌 essere modificato).
**Per Utenti Python**
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**Passo 2**: Apri il file del codice.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/python
**Passo 3**: Esegui.
.. raw:: html
.. code-block::
sudo python3 3.1.11_MorseCodeGenerator.py
Dopo l'avvio del programma, digita una serie di caratteri, e il buzzer e il
LED invieranno i segnali Morse corrispondenti.
**Codice**
.. note::
Puoi **Modificare/Reset/Copiare/Eseguire/Fermare** il codice qui sotto.
Tuttavia, prima di farlo, 猫 necessario accedere al percorso del codice
sorgente come ``davinci-kit-for-raspberry-pi/python``.
.. code-block:: python
import RPi.GPIO as GPIO
import time
BeepPin=22
ALedPin=17
MORSECODE = {
'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',
}
def setup():
GPIO.setmode(GPIO.BCM)
GPIO.setup(BeepPin, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(ALedPin,GPIO.OUT,initial=GPIO.LOW)
def on():
GPIO.output(BeepPin, 1)
GPIO.output(ALedPin, 1)
def off():
GPIO.output(BeepPin, 0)
GPIO.output(ALedPin, 0)
def beep(dt): # dt per il tempo di ritardo.
on()
time.sleep(dt)
off()
time.sleep(dt)
def morsecode(code):
pause = 0.25
for letter in code:
for tap in MORSECODE[letter]:
if tap == '0':
beep(pause/2)
if tap == '1':
beep(pause)
time.sleep(pause)
def main():
while True:
code=input("Please input the messenger:")
code = code.upper()
print(code)
morsecode(code)
def destroy():
print("")
GPIO.output(BeepPin, GPIO.LOW)
GPIO.output(ALedPin, GPIO.LOW)
GPIO.cleanup()
if __name__ == '__main__':
setup()
try:
main()
except KeyboardInterrupt:
destroy()
**Spiegazione del Codice**
.. code-block:: python
MORSECODE聽=聽{
聽聽聽聽'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
i caratteri da A-Z, i numeri da 0-9 e i simboli come \"?\" \"/\" \":\" \",\" \".\" \";\" \"!\" \"@\".
.. code-block:: python
def聽on():
聽聽聽聽GPIO.output(BeepPin,聽1)
聽聽聽聽GPIO.output(ALedPin,聽1)
La funzione on() attiva il buzzer e il LED.
.. code-block:: python
def聽off():
聽聽聽聽GPIO.output(BeepPin,聽0)
聽聽聽聽GPIO.output(ALedPin,聽0)
La funzione off() 猫 utilizzata per spegnere il buzzer e il LED.
.. code-block:: python
def聽beep(dt):聽聽聽#聽x聽for聽dalay聽time.
on()
time.sleep(dt)
off()
time.sleep(dt)
Definisce una funzione beep() per far emettere suoni e lampeggiare il
buzzer e il LED in un certo intervallo di **dt**.
.. code-block:: python
def聽morsecode(code):
聽聽聽聽pause聽=聽0.25
聽聽聽聽for聽letter聽in聽code:
聽聽聽聽聽聽聽聽for聽tap聽in聽MORSECODE[letter]:
聽聽聽聽聽聽聽聽聽聽聽聽if聽tap聽==聽'0':
beep(pause/2)
聽聽聽聽聽聽聽聽聽聽聽聽if聽tap聽==聽'1':
beep(pause)
time.sleep(pause)
La funzione morsecode() processa il codice Morse dei caratteri di input,
facendo in modo che i segnali "1" siano prolungati e quelli "0" siano brevi.
Ad esempio, digitando "SOS", si ottiene un segnale di tre brevi, tre lunghi
e tre brevi " 路 路 路 - - - 路 路 路 ".
.. code-block:: python
def聽main():
聽聽聽聽while聽True:
聽聽聽聽聽聽聽聽code=input("Please聽input聽the聽messenger:")
聽聽聽聽聽聽聽聽code聽=聽code.upper()
print(code)
morsecode(code)
Quando si digita il messaggio con la tastiera, upper() converte le
lettere inserite in maiuscole.
La funzione Printf() stampa quindi il testo chiaro sullo schermo, e
a funzione morsecode() fa s矛 che il buzzer e il LED emettano il codice Morse.
Immagine del Fenomeno
-----------------------
.. image:: img/image270.jpeg
:align: center