Nota
Ciao, benvenuto nella Community di appassionati di Raspberry Pi, Arduino e ESP32 di SunFounder su Facebook! Approfondisci il mondo di Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati.
Perché unirsi?
Supporto esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara & Condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime.
Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni festive e giveaway: Partecipa a giveaway e promozioni festive.
👉 Pronto per esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!
4.1.16 Generatore di Codice Morse
Introduzione
In questo progetto, realizzeremo un generatore di codice Morse, dove digiterai una serie di lettere in inglese nel Raspberry Pi per farle apparire come codice Morse.
Componenti Necessari
In questo progetto, ci servono i seguenti componenti.
È sicuramente conveniente acquistare un intero kit, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
Raphael Kit |
337 |
Puoi anche acquistarli separatamente dai link qui sotto.
INTRODUZIONE COMPONENTE |
LINK DI ACQUISTO |
|---|---|
- |
|
Schema Elettrico
T-Board Name |
physical |
wiringPi |
BCM |
GPIO17 |
Pin 11 |
0 |
17 |
GPIO22 |
Pin 15 |
3 |
22 |
Procedure Sperimentali
Passo 1: Costruisci il circuito. (Fai attenzione ai poli del cicalino: Quello con l’etichetta + è il polo positivo e l’altro è il polo negativo.)
Passo 2: Apri il file del codice.
cd ~/raphael-kit/python
Passo 3: Esegui.
sudo python3 4.1.16_MorseCodeGenerator.py
Dopo l’esecuzione del programma, digita una serie di caratteri e il cicalino e il LED invieranno i segnali corrispondenti del codice Morse.
Codice
#!/usr/bin/env python3
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
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 a Z, i numeri da 0 a 9 e i segni “?” “/” “:” “,” “.” “;” “!” “@”.
def on():
GPIO.output(BeepPin, 1)
GPIO.output(ALedPin, 1)
La funzione on() avvia il cicalino e il LED.
def off():
GPIO.output(BeepPin, 0)
GPIO.output(ALedPin, 0)
La funzione off() spegne il cicalino e il LED.
def beep(dt): # dt per il tempo di ritardo.
on()
time.sleep(dt)
off()
time.sleep(dt)
Definisce una funzione beep() per far emettere suoni al cicalino e
far lampeggiare il LED a intervalli di tempo 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)
La funzione morsecode() elabora il codice Morse dei caratteri inseriti
facendo sì che il «1» del codice emetta suoni o luci prolungati e il «0»
emetta suoni o luci brevi, es., inserendo “SOS” si otterrà un segnale
che contiene tre punti brevi, tre linee lunghe e tre punti brevi « · · · - - - · · · «.
def main():
while True:
code=input("Please input the messenger:")
code = code.upper()
print(code)
morsecode(code)
Quando si digitano i relativi caratteri con la tastiera, upper() converte
le lettere inserite in maiuscole.
printf() stampa quindi il testo leggibile sullo schermo del computer e la
funzione morsecode() fa emettere al cicalino e al LED il codice Morse.
Immagine del fenomeno