как читать несколько пин-кодов gpio одновременно и выполнять некоторые задачи в Raspberry Pi 3 - PullRequest
0 голосов
/ 25 февраля 2020

В соответствии с моим проектом, я уже взаимодействую с поворотным энкодером с Raspberry с помощью метода обратного вызова прерываний и подключаю некоторый выход в зависимости от этого. Но я застрял, чтобы прочитать 3 вывода GPIO, поскольку я использую их как вход и сигнал чтения, поступающий от другого контроллер как 3.3v и 0v (для 1,0). Поскольку мой полный код такой длинный, я создал демонстрационный пример своего кода и предоставил его ниже.

import pigpio
import tkinter as tk
import time
class decoder: "for my interrupt event "
    ######
   #######
if __name__=="__main__":
    pi.set_mode(5,pigpio.INPUT)
    pi.set_mode(6, pigpio.INPUT)
    pi.set_mode(13, pigpio.INPUT)
    pi.set_pull_up_down(5,pigpio.PUD_DOWN)
    pi.set_pull_up_down(6, pigpio.PUD_DOWN)
    pi.set_pull_up_down(13, pigpio.PUD_DOWN)
    def callback(*arg):
        ####
    def blinklevel1():
        ******
    def blinklevel2():
        ******
    def blinklevel3():
        ********
    decoder=rotary_encoder.decoder(pi,22,23,callback())
    root=tk.TK()
    L1=tk.Label(root,text="1st level on")
    L1.pack()
    L2=tk.Label(root,text="2nd level on")
    L2.pack()
    L3=tk.Label(root,text="3rd level on")
    L3.pack()
    if pi.read(5)==1 and pi.read(6)==0 and pi.read(13)==0:
        blinklevel1()
    if pi.read(5) == 1 and pi.read(6) == 1 and pi.read(13) == 0:
        blinklevel2()
    if pi.read(5) == 1 and pi.read(6) == 0 and pi.read(13) == 1:
        blinklevel3()
    root.mainloop()
    pi.stop()

Я особенно столкнулся с проблемой нижеприведенной части полный код:

if pi.read(5)==1 and pi.read(6)==0 and pi.read(13)==0:
       blinklevel1()
   if pi.read(5) == 1 and pi.read(6) == 1 and pi.read(13) == 0:
       blinklevel2()
   if pi.read(5) == 1 and pi.read(6) == 0 and pi.read(13) == 1:
       blinklevel3()

Эта часть кода работает нормально, если я создал другую программу и поставил ее как ..

try:
  while True:
     if pi.read(5)==1 and pi.read(6)==0 and pi.read(13)==0:
        blinklevel1()
     if pi.read(5) == 1 and pi.read(6) == 1 and pi.read(13) == 0:
        blinklevel2()
     if pi.read(5) == 1 and pi.read(6) == 0 and pi.read(13) == 1:
        blinklevel3()
finally:
....

Но я не могу использовать концепцию True в моем код проекта уже запущен tkinter l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...