Нужен совет по автомату (СТОП-кнопка)

sirik
Offline
Зарегистрирован: 10.11.2012

 

Добрый вечер

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

Так же в автомате есть СТОП-кнопка, по которой автомат должен блокироваться. Как бы корректней сделать обработчик этой кнопки?

У меня в основном цикле есть несколько циклов ожидания на delay и несколько рабочих минициклов, которые то ждут ответа с концевика, то паузу через delay. Я думаю, что надо заменить delay на циклы ожидания и в них вызывать проверку на нажатия кнопки, но боюсь, что конструкции проверки будут уж слишком громоздкими.

Подскажите решение, мб есть какие-нибудь мыслишки)

Спасибо

 

 

alex85
Offline
Зарегистрирован: 12.11.2013
 int time=((millis())/1000)%2;//выводить 1 раз в секунду
if(time==1)   {
......
.....
.....}
//тогда каждую секунду будет выполняться if
 

 

alex85
Offline
Зарегистрирован: 12.11.2013
int knopka
If(knopka==1){
.....
....
.....
}
//кстати лучше использовать в данном случае boolean переменную
//если заменить все delay тем что выше то все будет норм работать по идее

 

 

Zizilk
Offline
Зарегистрирован: 30.05.2013

Прерывания? Они обрабатываются вроде как отдельно от всего, но могут влиять на всё

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

Если ето аварийный стоп, то им лучше вырубать без участия МК и уже потом только через доп контакты заводить сигнал аварии/останова на МК. Используйте прерывания. Та и вообще ждать событие в глухом цикле, это "некрасиво".

sirik
Offline
Зарегистрирован: 10.11.2012

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

 

std
Offline
Зарегистрирован: 05.01.2012

Ключевое слово "блокируется". Знать бы, каким именно образом. Может вообще лучше сделать некое внешнее независимое устройство (RS-триггер например?) которое по кнопке вообще бы обесточивало девайс/посылало команду прекратить действие/включало тормозящие электромагниты и т д и т п.