我正在使用WiringPi寶石。這個代碼塊按預期工作:無法多次運行方法
pinNumber = 7
io = WiringPi::GPIO.new do |gpio|
gpio.pin_mode(pinNumber, WiringPi::INPUT)
end
pin_state = io.digital_read(pinNumber)
return pin_state
然而,當我附上這一個方法,所以我可以用Sinatra打電話,我得到以下錯誤,當我嘗試刷新:
wiringPiSetup *:每次程序運行只能調用一次。這是致命錯誤 。請修正您的代碼。
爲什麼這隻能運行一次,什麼是最好的解決方案?每次我導航到根網址時,最終都需要檢索pin_state
。
下面是完整的代碼:
require 'wiringpi'
require 'sinatra'
def getstate()
pinNumber = 7
io = WiringPi::GPIO.new do |gpio|
gpio.pin_mode(pinNumber, WiringPi::INPUT)
end
pin_state = io.digital_read(pinNumber)
return pin_state
end
get '/' do
getstate()
end
謝謝,但不幸的是當我移動它的一部分代碼的方法之外,我得到「未定義的局部變量或方法'IO」爲#」,當我瀏覽到URL的第一次。 –
@AaronThomas你需要緩存方法外的'io'對象。初始化該對象並將其保存到變量中,然後在'getstate'方法內使用該變量。將'do .. end'塊中的部分移動到'getstate'方法的主體中。 – zetetic
@zetetic我不追隨 - 你能舉一個你想到的例子嗎? –