Raspberry Piで動作するコードに問題があります。 pythonで始めたばかりなので、助けが必要です。
これはコードです:
_import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
led1=22
led2=17
GPIO.setup(led1, GPIO.OUT)
GPIO.setup(led2, GPIO.OUT)
def blink():
GPIO.output(led1, 1)
time.sleep(1)
GPIO.output(led1, 0)
GPIO.output(led2, 1)
time.sleep(1)
GPIO.output(led2, 0)
while(blink):
blink()
try:
main()
except KeyboardInterrupt:
GPIO.cleanup()
_
このエラーを実行すると、コンソールに表示されます:
RuntimeWarning:このチャネルはすでに使用されており、とにかく続行されます。警告を無効にするには、GPIO.setwarnings(False)を使用します。 GPIO.setup(led1、GPIO.OUT)および:
RuntimeWarning:このチャネルはすでに使用されており、とにかく続行されます。警告を無効にするには、GPIO.setwarnings(False)を使用します。 GPIO.setup(led2、GPIO.OUT)
私が正しく理解していれば、コマンドGPIO.cleanup()
はGPIOポートのすべてのピンをリセットし、LEDをオフにする必要があります。
しかし、これは実際には起きていません。
この問題を解決するためにコードをどのように変更できますか?
関数を効果的に分離し、より一般的なものにする方法について少し説明します。これは動作するPythonスクリプトですが、raspiでテストしていませんが、動作すると思います-とにかく、私に知らせてください問題がありました!
import RPi.GPIO as GPIO
import time
# Module level constants
LED1 = 22
LED2 = 17
# Sets up pins as outputs
def setup(*leds):
GPIO.cleanup()
GPIO.setmode(GPIO.BCM)
for led in leds:
GPIO.setup(led, GPIO.OUT)
GPIO.output(led, GPIO.LOW)
# Turn on and off the leds
def blink(*leds):
# Blink all leds passed
for led in leds:
GPIO.output(led, GPIO.HIGH)
time.sleep(1)
GPIO.output(led, GPIO.LOW)
if __name__ == '__main__':
# Setup leds
setup(LED1, LED2)
# Run blinking forever
try:
while True:
blink(LED1, LED2)
# Stop on Ctrl+C and clean up
except KeyboardInterrupt:
GPIO.cleanup()
フレンドリーな推奨事項:
専用のRaspberry Pi StackExchangeサイトもあります: https://raspberrypi.stackexchange.com/
質問にmain
が含まれていないようです。ただし、プログラムがKeyboardInterrupt
以外の何らかの理由で終了した場合、問題が発生する可能性があります。 finally
ブロックでリソースを解放することをお勧めします
try:
main()
except KeyboardInterrupt:
pass
finally:
GPIO.cleanup()
main()
関数を呼び出していますが、宣言(定義)されていないため、while(blink)
を使用しています。したがって、「main()」を削除し、「Try」をメイン関数の前に置く必要があります。これはwhile(blink)
ループです。そこで適切なタブを忘れないでください。