具有PIGPIO的PiTFT上的GPIO按钮

时间:2018-07-15 13:42:05

标签: python raspberry-pi gpio

我刚刚在我的RPi 3中添加了Adafruit 2.2“ PiTFT,并且其中包含的四个按钮都存在问题。我开始使用GPIO,但是在反复触发回调或未按任何操作时出现了很多问题,我但是,确实确实给人以印象,所有四个按钮都可以正常工作,因为我正在为每个按钮打断。

我切换到PIGPIO并在线查看了示例,这对于GPIO17上的按钮正常工作,但对其他三个按钮均无效。我以为可能只有第一个“接受了”,所以我尝试以不同的顺序分配回调或删除一些回调,但是没有运气。我的代码(从其他示例中复制)出什么问题了,对您来说很重要吗?

按17键将按预期方式打印出文本,其他任何都不做。

最终这将以循环方式运行,以捕获温度和湿度读数并将其记录下来,我的计划是使用按钮关闭程序,关闭程序并关闭Pi和其他一些辅助任务。

    oraConnection = new OracleConnection();
    da = new OracleDataAdapter();
    ds = new DataSet();

    oraConnection.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.20.10.8)(PORT=1521))(CONNECT_DATA=(SID=orcl12c)));";
    cmdText = "begin open :1 for select * from adr; open :2 for select * from person; end;"; 
    cmd = new OracleCommand();
    cmd.CommandText = cmdText;
    cmd.Connection = oraConnection;
    cmd.CommandType = CommandType.Text; 

    OracleParameter refcur1 = cmd.Parameters.Add("Refcur", OracleDbType.RefCursor);
    refcur1.Direction = ParameterDirection.Output;
    OracleParameter refcur2 = cmd.Parameters.Add("Refcur", OracleDbType.RefCursor);
    refcur2.Direction = ParameterDirection.Output;

        da.SelectCommand = cmd;
        da.Fill(ds);

1 个答案:

答案 0 :(得分:0)

经过一些比较和测试我的代码现在可以正常工作了,看来问题出在与设置中断/回调有关,而不是事后清除(取消)它们。现在,下面的代码会在每次按下按钮时触发一次回调(我将其更改为RISING_EDGE,使用EITHER_EDGE时,如果您需要的话,它将在按下并释放时触发。

import pigpio 
import time 
btn17=17 
btn22=22 
btn23=23 
btn27=27 

def btnHandler17(pin,level,tick):
    print("Button 17 Pressed",pin,level,tick) 

def btnHandler22(pin,level,tick):
    print("Button 22 Pressed",pin,level,tick) 

def btnHandler23(pin,level,tick):
    print("Button 23 Pressed",pin,level,tick) 

def btnHandler27(pin,level,tick):
    print("Button 27 Pressed",pin,level,tick) 

pi = pigpio.pi() 

if pi.connected:
    pi.set_pull_up_down(btn17, pigpio.PUD_UP)
    pi.set_mode(btn17, pigpio.INPUT)
    cb17 = pi.callback(btn17, pigpio.RISING_EDGE, btnHandler17)

    pi.set_pull_up_down(btn22, pigpio.PUD_UP)
    pi.set_mode(btn22, pigpio.INPUT)
    cb22 = pi.callback(btn22, pigpio.RISING_EDGE, btnHandler22)

    pi.set_pull_up_down(btn23, pigpio.PUD_UP)
    pi.set_mode(btn23, pigpio.INPUT)
    cb23 = pi.callback(btn23, pigpio.RISING_EDGE, btnHandler23)

    pi.set_pull_up_down(btn27, pigpio.PUD_UP)
    pi.set_mode(btn27, pigpio.INPUT)
    cb27 = pi.callback(btn27, pigpio.RISING_EDGE, btnHandler27)

    time.sleep(30)

    cb17.cancel()
    cb22.cancel()
    cb23.cancel()
    cb27.cancel()
    pi.stop() 
else:
    print("Unable to connect PIGPIO, exiting")
    exit(0)