Алгоритм подсчета нажатия на кнопку

tytar
Offline
Зарегистрирован: 23.03.2016

Доброго времени суток всем! Совсем недавно начал разбираться с ардуино. И собственно вопрос. Как реализвавать следующий алгоритм.

Если нажата 1 раз кнопка, светится, например, красный светодиод, если два раза - зеленый, еще раз нажимаем 1 раз - красный гаснет, если еще два раза подряд гаснет зеленый. Если три подряд нажатия гасим все светодиоды? 

Понимаю что нужно копать в сторону внешних прервываний. Но каков сам алгоритм?!

vde69
Offline
Зарегистрирован: 10.01.2016
NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Прерывания тут никчему.

нужно считать число нажатий и проверять время - если время вышло то выполнять нужное действие отсчет времени начинается с первого нажатия.

подсчет нажатий производится так :

если вывод==состояние тогда {

если !флаг тогда {

нажатия++

флаг = установлен

ждать 20мс

}

}иначе{

флаг = снят

}

если !флаг и нажатия > 0 тогда {

выбор(нажатия) {

при 1:

выводсостояниеЗапись(красн,  !выводсостояниеЧтение(красн))

завершить

при 2:

выводсостояниеЗапись(зел, !выводсосояниеЧтение(зел))

завершить

при 3:

выводсостояниеЗапись(красн, отключен)

вывод состояниеЗапись(зел, отключен)

завершить

}

нажатия  = 0

}

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Титановый велосипед в чистом виде тут работать не будет как надо, ибо даблклик он воспринет и как даблклик, и как два одиночных клика. Если только немного подпилить чтобы ждал отсутствие даблклика...

Клапауций 322
Offline
Зарегистрирован: 31.12.2015

Mr.Privet пишет:

Титановый велосипед в чистом виде тут работать не будет как надо, ибо даблклик он воспринет и как даблклик, и как два одиночных клика. Если только немного подпилить чтобы ждал отсутствие даблклика...

ничего пилить не нужно - достаточно понять, что даблклик никак не влияет на подсчёт кликов.

*за попытку заюзать триклик - ТС приговаривается к ампутации указательного пальца на правой руке... пусть средним в носу ковыряется.