Nota
Ciao, benvenuto nella community SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci il mondo di Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
Perché unirsi?
Supporto esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.
Impara e condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.
Anteprime esclusive: Ottieni accesso anticipato a nuovi annunci di prodotti e anteprime.
Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni festive e concorsi: Partecipa a concorsi e promozioni speciali durante le festività.
👉 Sei pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!
4.1.13 Generatore di Codice Morse
Introduzione
In questo progetto, realizzeremo un generatore di codice Morse, dove puoi digitare una serie di lettere inglesi nel Raspberry Pi per trasformarle in codice Morse.
Componenti necessari
In questo progetto, avremo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
OGGETTI IN QUESTO KIT |
LINK |
|---|---|---|
Kit Raphael |
337 |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE DEI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
- |
|
Schema elettrico
T-Board Name |
physical |
wiringPi |
BCM |
GPIO17 |
Pin 11 |
0 |
17 |
GPIO22 |
Pin 15 |
3 |
22 |
Procedure sperimentali
Passo 1: Monta il circuito. (Fai attenzione ai poli del cicalino: Quello con l’etichetta + è il polo positivo, l’altro è il polo negativo.)
Passo 2: Apri il file di codice.
cd ~/raphael-kit/python-pi5
Passo 3: Esegui.
sudo python3 4.1.16_MorseCodeGenerator_zero.py
Dopo l’avvio del programma, digita una serie di caratteri e il cicalino e il LED invieranno i segnali corrispondenti in codice Morse.
Avvertimento
Se viene visualizzato l’errore RuntimeError: Cannot determine SOC peripheral base address, fare riferimento a If gpiozero doesn’t work..
Code
#!/usr/bin/env python3
from gpiozero import Buzzer, LED
import time
# Inizializza il cicalino e il LED sui pin GPIO
BeepPin = Buzzer(22)
ALedPin = LED(17)
# Rappresentazione in codice Morse per i caratteri
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 on():
""" Turn on the buzzer and LED. """
BeepPin.on()
ALedPin.on()
def off():
""" Turn off the buzzer and LED. """
BeepPin.off()
ALedPin.off()
def beep(dt): # dt per il tempo di ritardo.
"""
Produce a beep sound and LED flash for the specified duration.
:param dt: Duration for the beep and flash.
"""
on()
time.sleep(dt)
off()
time.sleep(dt)
def morsecode(code):
"""
Convert the input code into Morse code and signal it using the buzzer and LED.
:param code: The text to be converted to Morse code.
"""
pause = 0.25
for letter in code:
for tap in MORSECODE[letter]:
if tap == '0':
beep(pause / 2) # Beep breve per punto
if tap == '1':
beep(pause) # Beep lungo per linea
time.sleep(pause) # Pausa tra le lettere
def destroy():
""" Clean up resources on script termination. """
print("")
BeepPin.off()
ALedPin.off()
try:
while True:
code = input("Please input the messenger:")
code = code.upper() # Converti in maiuscolo per la ricerca nel codice Morse
print(code)
morsecode(code)
except KeyboardInterrupt:
destroy()
Spiegazione del Codice
Questo codice importa le classi Buzzer e LED dalla libreria gpiozero. Queste classi sono essenziali per il controllo dei dispositivi GPIO su Raspberry Pi.
#!/usr/bin/env python3 from gpiozero import Buzzer, LED import time
Inizializza il cicalino sul pin GPIO 22 e il LED sul pin GPIO 17, facilitando il controllo di questi componenti.
# Inizializza il cicalino e il LED sui pin GPIO BeepPin = Buzzer(22) ALedPin = LED(17)
Definisce la struttura
MORSECODE, un dizionario contenente le rappresentazioni in codice Morse per i caratteri da A a Z, i numeri da 0 a 9, e simboli come “?”, “/”, “:”, “,”, “.”, “;”, “!”, “@”, dove0rappresenta un punto e1una linea.# Rappresentazione in codice Morse per i caratteri 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', }
La funzione
on()accende il cicalino e il LED. La funzioneoff()spegne il cicalino e il LED.def on(): """ Turn on the buzzer and LED. """ BeepPin.on() ALedPin.on() def off(): """ Turn off the buzzer and LED. """ BeepPin.off() ALedPin.off()
Definisce una funzione
beep()per far emettere suoni e lampeggiare il LED ad intervalli stabiliti dadt.def beep(dt): # dt per la durata. """ Produce a beep sound and LED flash for the specified duration. :param dt: Duration for the beep and flash. """ on() time.sleep(dt) off() time.sleep(dt)
La funzione
morsecode()elabora il codice Morse dei caratteri in ingresso facendo emettere suoni o luci lunghi per il “1” del codice e brevi per lo “0”. Ad esempio, inserendo “SOS” il segnale emetterà tre punti brevi, tre linee lunghe e di nuovo tre punti brevi « · · · - - - · · · «.def morsecode(code): """ Convert the input code into Morse code and signal it using the buzzer and LED. :param code: The text to be converted to Morse code. """ pause = 0.25 for letter in code: for tap in MORSECODE[letter]: if tap == '0': beep(pause / 2) # Beep breve per punto if tap == '1': beep(pause) # Beep lungo per linea time.sleep(pause) # Pausa tra le lettere
Definisce una funzione chiamata
destroyche spegne sia il cicalino che il LED. Questa funzione viene chiamata alla chiusura dello script per assicurarsi che i pin GPIO non rimangano attivi.def destroy(): """ Clean up resources on script termination. """ print("") BeepPin.off() ALedPin.off()
Quando digiti i caratteri rilevanti sulla tastiera,
upper()convertirà le lettere inserite in maiuscolo.print()quindi visualizza il testo in chiaro sullo schermo, e la funzionemorsecode()fa sì che il cicalino e il LED emettano il codice Morse.try: while True: code = input("Please input the messenger:") code = code.upper() # Converti in maiuscolo per la ricerca nel codice Morse print(code) morsecode(code) except KeyboardInterrupt: destroy()