Нужно ли связывать GPIO.IN с GPIO.OUT в RPi.GPIO, чтобы он работал правильно? - PullRequest
0 голосов
/ 09 января 2020

Я писал код на распбианском эмуляторе с GPIO. Я могу заставить его работать, но по какой-то причине, когда я меняю порядок GPIO.HIGH и оператор print в условных выражениях, он не работает должным образом и останавливается после первого щелчка. Кто-нибудь знает, если это проблема с эмулятором или просто свойство raspberry pi и подключения его к оборудованию? Это также не работает вообще, если я не связываю GPIO.IN с GPIO.OUT.

этот gif показывает, что происходит, когда я меняю порядок или удаляю - он включается в первый раз, но это не выключайте и не включайте снова после этого. По какой-то причине это ломает время, пока l oop.

gif of activity

Вот код, который я использую:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
import time
#initialise a previous input variable to 0 (assume button not pressed last)
prev_input = 0
prev_input1 = 0

inputs = [11, 13, 15]
outputs = [3, 5, 7]
GPIO.setup(inputs, GPIO.IN)
GPIO.setup(outputs, GPIO.OUT)

secs = 0

def main():
  while True:
    button_press(15, 7)
    timer = add_secs(11, 5, 2)
    #print(timer)


def button_press(button1, button2):
  #take a reading
  global prev_input
  inputa = GPIO.input(button1)
  #if the last reading was low and this one high, print
  if ((not prev_input) and inputa):
    print("Light on")
    GPIO.output(button2, GPIO.HIGH)   #code does not work if I remove/reorder this statement
  if((not inputa) and prev_input):
    print("Light off")
    GPIO.output(button2, GPIO.LOW)      #code does not work if I remove/reorder this statement
  #update previous input
  prev_input = inputa
  #slight pause to debounce
  time.sleep(0.05)

def add_secs(button1, button2, num):
  global prev_input1
  secs = 0
  inputa = GPIO.input(button1)
  if((not prev_input1) and inputa):
    secs = num
    print(secs)
    GPIO.output(button2, GPIO.LOW)      #code does not work if I remove/reorder this statement
  prev_input1 = inputa
  time.sleep(0.05)
  return secs


main()

1 Ответ

0 голосов
/ 13 января 2020

Я связался с разработчиком эмулятора, и он сообщил мне, что проблема с эмулятором теперь решена.

Код работает правильно после очистки данных просмотра в chrome и повторного запуска программа.

...