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.

../_images/list_Morse_Code_Generator.png

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

Nome

ELEMENTI IN QUESTO KIT

LINK

Raphael Kit

337

Raphael Kit

Puoi anche acquistarli separatamente dai link qui sotto.

INTRODUZIONE COMPONENTE

LINK DI ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

LED

ACQUISTA

Cicalino

-

Transistor

ACQUISTA

Schema Elettrico

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO22

Pin 15

3

22

../_images/Schematic_three_one11.png

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

../_images/image269.png

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

../_images/image270.jpeg