私は初心者プログラマーです。私はコモドールで64日間Basicでコードすることを学びました。最近、私はRaspberry Pi 3と8チャンネルのリレーボードを購入し、GPIOピンを介してリレーボードを制御するためにPython 3.xでスクリプトを書いています。私が書いたスクリプトは動作しますが、それはあまり効率的ではないと思われます。どんな批評や助言も高く評価されます。rpi3 GPIOピンとPythonスクリプトの切り替え
私は、数字が入力されたときにピンの状態を切り替えるようにスクリプトを変更したいと言われています。現在、ユーザーが数字を入力すると、ピンは数秒間アクティブになり、その後シャットダウンします。ユーザーが同じ番号を再び選択するまで、ピンはアクティブのままにしておきたいと思います。私はかなりうまくいくものを作ることができると確信していますが、私の最初の考えはもう一度それをオフにする別のループを開始することでしょう。それが意味をなさないかどうかわかりませんが、私はそれがエレガントで効率的にコード化されたソリューションではないと確信しています。
ご意見やご協力をいただければ幸いです。
import RPi.GPIO as GPIO # import the GPIO Library
import time # import system time
GPIO.setmode(GPIO.BCM) # set pin numbering
PinList = [2, 3, 4, 17, 27, 22, 10, 9] # init list with pin numbers
SleepTime = 4 # set sleep delay variable
for i in PinList: # loop through pins and set mode and state to 'low'
GPIO.setup(i, GPIO.OUT)
GPIO.output(i, GPIO.HIGH)
# Get user input, turn on the appropriate GPIO pin, pause, then turn it off.
while True:
choice = input("\nEnter a number between 1 and 8.\nEnter 0 to exit: ")
if choice == '0':
break
if choice == '1':
print("You chose 1")
GPIO.output(9, GPIO.LOW)
time.sleep(SleepTime)
GPIO.output(9, GPIO.HIGH)
elif choice == '2':
print("You chose 2")
GPIO.output(10, GPIO.LOW)
time.sleep(SleepTime)
GPIO.output(10, GPIO.HIGH)
elif choice == '3':
print("You chose 3")
GPIO.output(22, GPIO.LOW)
time.sleep(SleepTime)
GPIO.output(22, GPIO.HIGH)
elif choice == '4':
print("You chose 4")
GPIO.output(27, GPIO.LOW)
time.sleep(SleepTime)
GPIO.output(27, GPIO.HIGH)
elif choice == '5':
print("You chose 5")
GPIO.output(17, GPIO.LOW)
time.sleep(SleepTime)
GPIO.output(17, GPIO.HIGH)
elif choice == '6':
print("You chose 6")
GPIO.output(4, GPIO.LOW)
time.sleep(SleepTime)
GPIO.output(4, GPIO.HIGH)
elif choice == '7':
print("You chose 7")
GPIO.output(3, GPIO.LOW)
time.sleep(SleepTime)
GPIO.output(3, GPIO.HIGH)
elif choice == '8':
print("You chose 8")
GPIO.output(2, GPIO.LOW)
time.sleep(SleepTime)
GPIO.output(2, GPIO.HIGH)
else:
print("\nThat is not a valid input.")
print ("\n Quit")
GPIO.cleanup() # Reset GPIO pin settings
素晴らしい提案!非常にエレガントで効率的です。私には2つの問題がありました。何らかの理由で私のPiは 'exit()'コマンドが好きではなかった。私は '休憩'のためにそれを交換し、それは正常に働いた。第2に、コンマがないために「8」が選択されたときに爆撃されました。今はうまく動作します。助けてくれてありがとう。 – Mekanik
便利だったのでうれしいです@Mekanik!私はあなたが 'import sys'を信じて、' sys.exit() 'を使って出口の問題を回避するべきだと思います。現実的には、 'break'がより良い可能性があります。そうすれば、' cleanup() 'がすべて呼び出されます。 – stevieb