我正在使用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我不追随 - 你能举一个你想到的例子吗? –