我正在尝试这样的程序:
按下按钮时,程序自动发送推文。这个程序不会给出错误,但总是说" Not Pushed Button"。
我真的是python的初学者。有人可以帮帮我吗?
#!/usr/bin/env python
import sys
from twython import Twython
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN)
apiKey = 'xxxxxxxxx'
apiSecret = 'xxxxxxxxx'
accessToken = 'xxxxxxxxxx'
accessTokenSecret = 'xxxxxxxxx'
api = Twython(apiKey,apiSecret,accessToken,accessTokenSecret)
GPIO.add_event_detect(7, GPIO.FALLING)
tweetStr = "@raspberrytest34 deneme 1-2-3"
if GPIO.event_detected(7):
api.update_status(status=tweetStr)
print "Tweeted: " + tweetStr
else:
print "Not Pushed Button"
答案 0 :(得分:2)
你的程序不会等待任何事情。它只是运行,测试按钮是否在初始化然后停止的几毫秒内被按下。
对于测试,您可以添加一个简单的
time.sleep(5)
到你的代码,让脚本等待五秒,然后评估你是否在此期间按下了按钮。
你也可以这样做:
try:
while True:
if GPIO.event_detected(7):
api.update_status(status=tweetStr)
print "Tweeted: " + tweetStr
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
print "\nBye"
这将永远运行,直到你按Ctrl-C并每秒响应一次你的按键。
然而,处理此问题的更好方法是将回调函数传递给键盘中断。注意回调函数只能通过全局变量与主脚本通信(如果有更好的方法,请有人纠正我!)。
import time
api = Twython(apiKey,apiSecret,accessToken,accessTokenSecret)
tweetStr = "@raspberrytest34 deneme 1-2-3"
def send_tweet(channel):
global tweetStr
global api
api.update_status(status=tweetStr)
print "Tweeted: " + tweetStr
GPIO.add_event_detect(7, GPIO.FALLING, callback=send_tweet)
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
print "\nBye"