<はじめての 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が聞こえたでしょうか。