Samodejni telegraf

Zadnja naloga pri projektu Morsejeve kode bo izdelava Malininega samodejnega telegrafa. Na preizkusno ploščico boš, kot v prejšnji nalogi, dodal/-a brenčač in LED diodo ter sprogramiral/-a program, ki bo samodejno začel oddajati sporočilo, ki ga boš vnesel/-a.

Strojna oprema

  • 1 Malina
  • 1 preizkusna ploščica (angl. breadboard)
  • 1 zatič oblike T s kablom (angl. T-cobbler with breakout cable)
  • 1 LED dioda
  • 1 upor 330 Ω
  • 1 aktivni brenčač (angl. active buzzer)
  • vtične žičke moški-moški (angl. jumper wire male-to-male)

Programska oprema

  • Python 3 (prednameščen na Raspbianu)
  • Pythonov modul gpiozero (prednameščen na Raspbianu)

Navodila

  1. Poveži Malinine GPIO nožice in preizkusno ploščico s pomočjo T-zatiča in kabla.
  2. Poveži LED diodo z nožico GND in nožico GPIO 27 (glej zavihek Vezje).
  3. Poveži aktivni brenčač z nožico GND in nožico GPIO 4 (glej zavihek Vezje).
  4. Odpri IDLE in ustvari novo datoteko tako, da klikneš File > New file.
  5. Shrani novo datoteko tako, da klikneš File > Save. Datoteki daj ime telegraf4.py.
  6. V datoteko telegraf4.py vnesi kodo z zavihka Koda.
  7. Shrani kodo s Ctrl+S in jo nato zaženi s F5.
  8. Ob pritisku na gumb bi moral/-a zaslišati zvoke brenčača in videti prižgano LED diodo.


# encoding: utf-8
import gpiozero
import time

def prizgi():
    aldis.on()
    zvok.on()

def ugasni():
    aldis.off()
    zvok.off()

def oddaj(zaporedje):
    for znak in zaporedje:
        prizgi()
        if znak == '.':
            time.sleep(enota)
        if znak == '-':
            time.sleep(3 * enota)
        ugasni()
        time.sleep(enota)

zvok = gpiozero.Buzzer(4)
aldis = gpiozero.LED(27)

enota = 0.1 # privzeta enota je desetinka sekunde

abeceda = {
    'A': '.-',     'B': '-...',   'C': '-.-.',
    'D': '-..',    'E': '.',      'F': '..-.',
    'G': '--.',    'H': '....',   'I': '..',
    'J': '.---',   'K': '-.-',    'L': '.-..',
    'M': '--',     'N': '-.',     'O': '---',
    'P': '.--.',   'Q': '--.-',   'R': '.-.',
    'S': '...',    'T': '-',      'U': '..-',
    'V': '...-',   'W': '.--',    'X': '-..-',
    'Y': '-.--',   'Z': '--..',   '0': '-----',
    '1': '.----',  '2': '..---',  '3': '...--',
    '4': '....-',  '5': '.....',  '6': '-....',
    '7': '--...',  '8': '---..',  '9': '----.'
}

sporocilo = input('Vnesi sporočilo:').upper()
sporocilo = sporocilo.replace('Č', 'C')
sporocilo = sporocilo.replace('Š', 'S')
sporocilo = sporocilo.replace('Ž', 'Z')

for znak in sporocilo:
    if znak in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ':
        if znak == ' ':
            time.sleep(7 * enota)
        else:
            oddaj(abeceda[znak])
            time.sleep(2 * enota)

Izvorna koda