Я использую жемчужину 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
нужно извлекать каждый раз, когда я перехожу к корневому URL.
Вот полный код:
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
Спасибо, но, к сожалению, когда я двигаюсь, что часть кода вне метода, я получаю «неопределенная локальная переменная или метод' ИО»для #», когда я перейти к URL в первый раз. –
@AaronThomas вам нужно кэшировать объект 'io' вне метода. Инициализируйте объект и сохраните его в переменной, а затем используйте переменную внутри метода getstate. Переместите часть, находящуюся в блоке 'do .. end', в тело метода getstate. – zetetic
@zetetic Я не буду следовать - не могли бы вы привести пример того, что вы имеете в виду? –