2016-08-09 2 views
0

Я меняю некоторые входы на устройство с реле, и я ожидаю, что в какой-то момент разломать прошивку. Вопрос в том, когда это произойдет?Выход из цикла, если GPIO не переключается во времени

Итак, чтобы определить, прорывается ли прошивка, я отслеживаю некоторые светодиоды, которые обычно мигают во время нормальной работы. Я знаю, что они закроются в любом состоянии, в котором они сейчас находятся, когда прошивка ломается. Итак, моя яркая идея состояла в простой передаче, которая сигнализировала о малине Pi и наблюдала за этим GPIO для изменения состояния. Если я вижу изменение состояния, тогда перейдите и переверните реле ... Затем посмотрите на светодиоды и убедитесь, что они все еще мигают ... полоскание, повторите.

Однако, я обычно проверить это с помощью прерывания или что-то в C, но я пишу это в Python ...

Что путь Python для работы с этим? Я знаю, что если я не вижу мигания в течение 2 секунд или около того, тест закончен, но я не уверен, как это сделать, не вызывая что-то вроде sleep ... к которому я не смог бы следить за изменениями контактов.

+1

Посмотрите на ['signal.alarm()'] (https://docs.python.org/3/library/signal.html# signal.alarm), например. –

ответ

0

С модуля gpio создайте функцию обратного вызова с резьбой, которая срабатывает каждый раз, когда обнаружен край подъема (или падения и т. Д.).

Затем с помощью signal в этой функции вызывать signal.alarm() для сброса тревоги при каждом изменении контакта.

Наконец использовать signal.signal() зарегистрировать функцию для того, что должно произойти, когда сигнал тревоги не сбрасывается во времени (то есть, прошивка сломалась)

это не будет работать, если вы используете окна, к сожалению ... вам понадобится реализовать собственную систему сигнализации с резьбой, если вы находитесь

+0

Это очень хорошо ... Как я получил больше в нее, я пошел немного другой маршрут: – testname123

+0

While (not_broken) {Do манипуляциям GPIO.Wait_for_falling_edge (таймаут = х секунд) если/другое заявление разбить петлю } – testname123