Последовательное нажатие кнопки.
- Войдите на сайт для отправки комментариев
Пт, 19/08/2011 - 12:20
Подскажите как должен выглядеть код ддя такого действия:
Нажатие кнопки первый раз выполняется одно действие,
Следующее нажатие(2), выполняеться другое действие,
Следующее нажатие(3), выполняеться другое действие,
Следующее нажатие(4), выполняеться другое действие,
и потом заново.
легко. Желательно через прерывание, потом
делается так при нажатии на кнопку в глобальной переменной +1, а дальше case() с выбором функций и когда эта глобальная переменная достигает нужной цифры допустим 4 то этой переменной присваиваем 0 и так по кругу
что не так?
нужно сюда вклеить код антидребезга кнопки.
все, нашел ошибку))
я пропустил
break;
исправил и все пашет)
спасибо)
Adessit, а почему желательно через прерывание?
Потому что когда делаешь с прерыванием то:
-по нажатию кнопки программа останавливается и делает нужную функцию;
-не надо ждать и делать лишнюю работу МК пока код в новом цикле программы дойдёт до пункта проверки нажатия клавиши.
-делается всё просто и легко, боятся нечего, зато в длительно работающих программах с большими задержками и прочими тягомотинами это самый лучший способ использовать кнопку(датчик и т.п.)
а как это реализовать програмно?
что-то у меня не получаеться адекватно...
да легко всё.
Надо собрать правильную кнопку с подтяжкой к земле или к +(я сделал подтяжку к земле на 10К резистором).
А дальше код программы:
........
#include<avr/interrupt.h>
int swpin1 = 2; // пин кнопки 1
int buttonState; //состояние кнопки
int buttonPress = 0; //значеня для выбора функций
void setup(){
attachInterrupt(0,switch1,CHANGE);//прерывания 0 (на цифровом пине 2) на функцию switch1
void loop()
{
switch (buttonstate) {
case 0:
что то делаем;
break;
case 1:
что то делаем;
break;
и так далее
}
}
void switch1()
{
buttonState = digitalRead(swpin1);
delayMicroseconds(300);
buttonPress++;
if (buttonPress == 3)
{
buttonPress = 0;
}
}
А можно этот же пример но на 2 кнопки? :-) чтобы сформировалась картинка окончательная :-)