[英]Raspberry Pi - Python - joystick
我正在使用Raspberry Pi。
while True:
if joystick.get_button(0) == 1:
print ("stop")
else
print ("start")
該代碼的目的是:我想在按下按鈕時中斷某些操作。
在運行代碼時,當我按下按鈕並一直給我“開始”時,它會忽略我。 但是,如果我將代碼更改為:
if joystick.get_button(0) == 0:
該程序使我立即“停止”。 (0是get_button(0)的默認值,1表示我按下了按鈕)
循環本身看起來還不錯,所以我認為問題在於您的get_button()方法的行為。 確保它返回正確的值,並且無限循環和狀態檢查不在同一線程中運行。
無論如何,我建議您使用Observer Pattern 。 基本上,它允許您在不使用無限循環的情況下通過操縱桿按鈕創建反應。
以下代碼應符合您的需求。 每次按下按鈕時,Player類的Joystick類調用方法,因此,每次Joystick更改其狀態時,都將使用此方法。
//OBSERVABLE OBJECT
class Joystick(object):
def __init__(self):
self._button = 0
self._observers = []
def get_button(self):
return self._button
def set_button(self, value):
for callback in self._observers:
callback(self._button)
def bind_to(self, callback):
self._observers.append(callback)
//OBSERVER OBJECT
class Player(object):
def __init__(self, controller):
self._state = 0; //1 - stop, 0 - play
self.controller.bind_to(self.change_state)
def change_state(self, new_state):
self_state = new_state
if(new_state == 0)
print 'play'
else
print 'stop'
該解決方案將在每次狀態更改時打印一次“ 播放 ”和“ 停止 ”。 然后在您的代碼中將創建一個可觀察的實例:
joystick = new Joystick()
並將其傳遞給觀察者:
player = new Player(joystick)
這樣,當您啟動setter函數時:
joystick.set_button(0)
游戲桿將自動更改玩家實例中的狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.