Опять кнопка
- Войдите на сайт для отправки комментариев
Пнд, 21/01/2013 - 22:19
Гуглил и по форуму полазил, но решения не нашёл.
Задача вроде и простая, но не получается. Удерживаю кнопку 3 сек - загорается светодиод. Отпускаю - гаснет. А у меня просто вкл- выкл.
int HOLD_DELAY = 3000; int ledPin = 13; int switchPin = 3; int sw_state = 0; int sw_laststate = 0; void setup() { pinMode(ledPin, OUTPUT); pinMode(switchPin, INPUT); } void loop(){ sw_state = digitalRead(switchPin); if (sw_state == HIGH ){ sw_state = sw_laststate; millis() >= HOLD_DELAY; digitalWrite(ledPin, LOW); } else { digitalWrite(ledPin, HIGH); } }
Тут смотрели?
http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no...
http://arduino.ru/forum/programmirovanie/pomogite-s-knopkami-i-svetom-ra...
Первую ссылку смотрел. По второй вот такой код написал - работает. Спасибо.
В начальном положении диоды не горят. Нажал один раз - загорелся первый, нажал второй раз - загорелся второй, первый погас. Опять нажал - оба не горят.
Как в такой код ввести удержание кнопки 3 секунды - горят оба диода, отпустил - погасли не нарушая предыдущей цикличности.
При таком подходе нужно инкрементировать regim++; не при нажатии кнопки, а при ее отпускании.
Правильно ли я понял, что надо вводить две глобальные переменные отвечающие за кратковременное и длительное нажатие кнопки. Затем запускать таймер и считывая значения времени звпускать или короткий или длительный клик.
Не совсем, нажали кнопку, сохранили текущее значение millis(), отпустили кнопку - сравниваем сохраненное и текущее значение millis(), если меньше 3 секунд значит инкрементируем regim++;, а если больше значит делаем что-то еще.
Можно например так сделать
Cпасибо maksim. Немного подправил ( в case 2 и case 3 добавил break ) и всё отлично работает.
Нашёл интересную програмку - красивое мерцание светодиода. Если честно, то не могу разобраться как её можно адаптировать в код с кнопками, чтобы мерцал какой нибудь светодиод. Я с такой структурой прграммы ещё не сталкивался.
решено в др. теме. Прошу удалить моё сообщение.