Когда я перезагружаю Raspberry и запускаю твой код, он работает отлично.
Проблема / ошибка возникает только после того, как процесс или клавиатура CTRL-C прервана и снова запущена. Я думаю, что это связано с тем, что вы выходите из программы без очистки должным образом ...
Это работает, если вы выходите из запущенной программы с помощью CTRL-C с кодом ниже, в который я включил GPIO.cleanup ()
Однако ... это, к сожалению, не распространяется на ситуацию, в которой вы просто убиваете запущенную программу ... В этом случае вам все равно нужно перезагрузиться.
Так что есть возможности для улучшения.
Пожалуйста, заново вставьте свои собственные команды управления файлами.
import RPi.GPIO as GPIO
import sys,os
import time
import datetime
channel = 21
led_output = 18
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(channel, GPIO.IN)
GPIO.setup(led_output, GPIO.OUT)
def callback(channel):
if GPIO.input(channel) == 1:
print ("Water Detected!")
GPIO.output(led_output, GPIO.LOW)
else:
print ("Water Not Detected!")
GPIO.output(led_output, GPIO.HIGH)
GPIO.add_event_detect(channel, GPIO.BOTH, bouncetime=300)
GPIO.add_event_callback(channel, callback)
print(GPIO.input(channel))
try:
while True:
#main loop here with some (dummy) code
eg_set_a_dummy_variable = 0
except KeyboardInterrupt:
# here you put any code you want to run before the program
# exits when you press CTRL+C
print ("Program interrupted by CTRL-C")
except:
# this catches ALL other exceptions including errors.
# You won't get any error messages for debugging
# so only use it once your code is working
print ("Other error or exception occurred!")
finally:
# this ensures a clean exit and prevents your
# error "Runtime error:Failed to add edge detection"
# in case you run your code for the second time after a break
GPIO.cleanup()
# credits to:
# https://raspi.tv/2013/rpi-gpio-basics-3-how-to-exit-gpio-programs-cleanly-avoid-warnings-and-protect-your-pi