<はじめての python_cw3 >

python_cw2に続いて、変数に代入した文字をモールスします。

<その前に>
次のプログラムを実行して見て下さい。文字列"ABCDEFGHI"の長さ取得と
文字列から、文字を1づつ取出して表示させます。
while文と文字取出しのスライスを使っています。

プログラムの<は半角にして下さい。
-----------------------------------------------------------
mojiletu="ABCDEFGHI"
#文字列長さ取得
n_len=len(mojiletu)
print (mojiletu + " 文字数= " + str(n_len) + "個")

#指定位置文字の取得
mojiletu="ABCDEFGHI"
#0    1    2     3    4    5    6    7    8    9
#   A    B    C    D    E    F    G   H    I

print()
#Aの取得 0と1の間(スライス)
n_moji=mojiletu[0:1]
print (n_moji)
print()

#Cの取得 2と3の間(スライス)
n_moji=mojiletu[2:3]
print (n_moji)
print()

#Iの取得 8と9の間(スライス)
n_moji=mojiletu[8:9]
print (n_moji)
print()

#文字を1個づつ取り出す
cnt=0
while cnt < n_len:
    n_moji=mojiletu[cnt:cnt+1] #(スライス)
    print (n_moji , end="")    #改行なしで表示
    cnt=cnt+1
-----------------------------------------------------------

右画像の結果になったでしょうか
 

次は、文字列"ACDFG"をモールス信号にしたプログラムですがif文を追加しています。
if文で、文字に対する関数を選択しています。例えば文字がAなら関数A()の処理をすると言う具合です。
本来なら、アルファベット、数字などの関数を全て載せるといいのですが、プログラムが長くなりますので
ここでは、アルファベットA-Gだけの関数にしました。

プログラムの<は半角にして下さい。
-------------------------------------------------------------------------------
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)

key=18
GPIO.setup(key,GPIO.OUT,initial=GPIO.LOW)
sec=0.1

def tan():
    GPIO.output(key,GPIO.HIGH)
    time.sleep(sec)
    GPIO.output(key,GPIO.LOW)
    time.sleep(sec)
    return

def tyo():
    GPIO.output(key,GPIO.HIGH)
    time.sleep(sec*3)
    GPIO.output(key,GPIO.LOW)
    time.sleep(sec)
    return

def sp_m():
    time.sleep(sec*2)
    return

def sp_t():
    time.sleep(sec*6)
    return

# ***** 関数 A-G *****
def A():
    tan()
    tyo()
    sp_m()
    return

def B():
    tyo()
    tan()
    tan()
    tan()
    sp_m()
    return

def b():
    tyo()
    tan()
    tan()
    tan()
    return

def C():
    tyo()
    tan()
    tyo()
    tan()
    sp_m()
    return

def D():
    tyo()
    tan()
    tan()
    sp_m()
    return
def E():
    tan()
    sp_m()
    return

def F():
    tan()
    tan()
    tyo()
    tan()
    sp_m()
    return

def G():
    tyo()
    tyo()
    tan()
    sp_m()
    return


def moji():
    if n_moji=="A":
        A()
    elif n_moji=="B":
        B()
    elif n_moji=="C":
        C()
    elif n_moji=="D":
        D()
    elif n_moji=="E":
        E()
    elif n_moji=="F":
        F()
    elif n_moji=="G":
        G()
    return

#モールス文字
cwmoji="ACDFG"
n_len=len(cwmoji)

cnt=0
while cnt < n_len:
    n_moji=cwmoji[cnt:cnt+1]
    print (n_moji , end="") #改行なしで表示
    moji()
    cnt=cnt+1
-------------------------------------------------------------------------------

モールスでACDFGが聞こえたでしょうか。