.. 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