我把一个液晶显示器连接到了一个我正在做的项目上。我有许多输入/输出,我想根据输入的状态显示不同的消息。现在,在我开始复杂化/添加更多硬件之前。我需要一些帮助。当没有激活的输入时,我想让LCD显示消息“等待输入”,然后一旦接收到输入,我想显示“输入一个激活”。我目前使用的是while true循环,但是一旦我清除了LCD显示屏,问题就出现了,因为每次循环都会触发屏幕上的文本。有没有更好的方法在while真循环之外做到这一点呢?
以下是我当前的代码
import I2C_LCD_driver
import time
import pigpio
mylcd = I2C_LCD_driver.lcd()
Debounce = 0.5
Input23 = 23
Input24 = 24
Input17 = 17
Output18 = 18
Output4 = 4
pi_GPIO = pigpio.pi()
pi_GPIO.set_mode(Input23, pigpio.INPUT)
pi_GPIO.set_pull_up_down(Input23 , pigpio.PUD_UP)
pi_GPIO.set_mode(Input24, pigpio.INPUT)
pi_GPIO.set_pull_up_down(Input24 , pigpio.PUD_UP)
pi_GPIO.set_mode(Input17, pigpio.INPUT)
pi_GPIO.set_pull_up_down(Input17 , pigpio.PUD_UP)
pi_GPIO.set_mode(Output18, pigpio.OUTPUT)
pi_GPIO.set_mode(Output4, pigpio.OUTPUT)
while True:
if pi_GPIO.read(Input23):
pi_GPIO.write(18, 0)
mylcd.lcd_clear()
mylcd.lcd_display_string("Input 1 Active", 1)
time.sleep(Debounce)
else:
pi_GPIO.read(Input23)
pi_GPIO.write(18, 1)
mylcd.lcd_clear()
mylcd.lcd_display_string("Awaiting Input", 1)
mylcd.lcd_display_string("Detection", 2)
time.sleep(Debounce)发布于 2018-11-19 01:17:46
当我使用Arduino做类似的事情时,我使用了一个标志。在这种情况下,我确实需要一个等效的While True:,因为这是主板的主要进程,并且在加电时必须在无限循环中运行。
您现在遇到的问题(我猜)是,每次循环命中以下代码时,您都会创建脉冲:
mylcd.lcd_clear()
mylcd.lcd_display_string(...)对此的任何简单(尽管不优雅)修复都类似于(这是Python3,它对字典迭代的works a bit differently比2.7)。我还没有机会对此进行测试(所以我可能遗漏了一些东西/犯了一些拼写错误),但希望您能理解:
inputs = {"Input17": False,
"Input23": False,
"Input24": False}
while True:
change_in_input = False
# check for change in inputs
for input in inputs:
if bool(pi_GPIO.read(input)) != bool(inputs[input]):
change_in_input = True
# update inputs based on change(s)
inputs[input] = pi_GPIO.read(input)
if change_in_input:
if not any(inputs.values()):
pi_GPIO.write(18, 1)
mylcd.lcd_clear()
mylcd.lcd_display_string("Awaiting Input", 1)
mylcd.lcd_display_string("Detection", 2)
elif inputs["Input23"]:
pi_GPIO.write(18, 0)
mylcd.lcd_clear()
mylcd.lcd_display_string("Input 1 Active", 1)
time.sleep(Debounce)https://stackoverflow.com/questions/53363399
复制相似问题