pulseIn и двойное нажатие клавиши
- Войдите на сайт для отправки комментариев
Ср, 19/11/2014 - 00:01
смысл такой
по зажатию кнопки больше чем на 0,5 секунды активировать void lob(); и держать пока не отпустишь кнопку.
по двойному клику на туже кнопку активировать void fara();.
Давлю на кнопку как могу, нихрена. Схему привел, скетч скинул.
Часть с двойным кликом в моем исполнении - бред сивой кобылы. Приму в дар исправления.
в конце все будет на Аттине13
int Fara = 7; int Lob = 6; int nasos = 3; int clapan = 2; int lepestok = 5; int davil = 0; void setup() { pinMode(Fara, OUTPUT); pinMode(Lob, OUTPUT); pinMode(nasos, OUTPUT); pinMode(clapan, OUTPUT); pinMode(lepestok, INPUT); pinMode(12,OUTPUT); } void loop() { int time1 = millis(); davil = pulseIn(lepestok, HIGH); if (davil > 500000) { lob(); } else if (davil<500000&&davil>200000) { if (((time1-millis())>220)&&(time1-millis())>2000) { fara(); } } } void lob() { digitalWrite(Lob,HIGH); digitalWrite(nasos,HIGH); delay(5000); digitalWrite(Lob,LOW); digitalWrite(nasos,LOW); } void fara() { int lep=digitalRead(lepestok); while( lep = 1) { digitalWrite(Fara,HIGH); digitalWrite(clapan,HIGH); digitalWrite(nasos,HIGH); delay(5000); digitalWrite(Fara,LOW); digitalWrite(clapan,LOW); digitalWrite(nasos,LOW); } }
pulseIn ждет изменение уровня секунду, и если ничего нет, то возвращает 0, ЕМНИП.
Т.е. проверяешь перед замером, что кнопка не нажат и начинаешь ловить. Если после замера 0, то прогон оказался пустым и ничего делать не надо.
Еще я не понял сакральный смысл 29-й строки.
чтобы эту мысль реализовать по человечески, нужно бы пользоваться прерываниями функция (attachInterrupt() ), и еще - кроме LOW и HIGH есть еще другие значения- в данном случае может быть актуально.
так что тут до фары, насоса и клапана еще очень далеко :-)
pulseIn ждет изменение уровня секунду, и если ничего нет, то возвращает 0, ЕМНИП.
Т.е. проверяешь перед замером, что кнопка не нажат и начинаешь ловить. Если после замера 0, то прогон оказался пустым и ничего делать не надо.
Еще я не понял сакральный смысл 29-й строки.
Секунду? Я вроде понял что таймаут ожидания можно выставлять, приписывая 3 параметр как время в МИКРОсекундах.
29 строкой пытался поймать быстрый клик, т.е. Зажатие больше чем на 0,2 секунды но меньше чем на 0,5
чтобы эту мысль реализовать по человечески, нужно бы пользоваться прерываниями функция (attachInterrupt() ), и еще - кроме LOW и HIGH есть еще другие значения- в данном случае может быть актуально.
так что тут до фары, насоса и клапана еще очень далеко :-)
я более менее умею обращаться с прерыванием.
У меня цель освоить пульсИн.
пусть фара, насос и клапан вас не смущают, допустим там 4 светодиода как на схеме.
А где могут быть интересующие меня значения кроме 1 и 0, я не понял
> А где могут быть интересующие меня значения кроме 1 и 0, я не понял
в digitalRead(), которым Вы не пользуетесь.
а 29я строка не причем, там просто в первой части знак перепутан (должно быть "<"). Ваша проблема, естественно, в том, что Вы храните сравниваете значения, которые имеют тип unsigned long (функции времени вроде millis() ) со своими переменными типа int. Если Вы посмотрите, какая максимальная величина может храниться в int, всё встанет на свои места.
IMHO, pulseIn() в данной задаче выглядит насильно притянутым за уши с целью изучения, а вот attachInterrupt() - самое то.
IMHO, pulseIn() в данной задаче выглядит насильно притянутым за уши с целью изучения, а вот attachInterrupt() - самое то.
согласен полностью. Просто хочу освоить
> А где могут быть интересующие меня значения кроме 1 и 0, я не понял
в digitalRead(), которым Вы не пользуетесь.
а 29я строка не причем, там просто в первой части знак перепутан (должно быть "<"). Ваша проблема, естественно, в том, что Вы храните сравниваете значения, которые имеют тип unsigned long (функции времени вроде millis() ) со своими переменными типа int. Если Вы посмотрите, какая максимальная величина может храниться в int, всё встанет на свои места.
В digitalRead() на выходе можно получить иное чем 0 или 1????
Да неужели?
>Да неужели?
Угу. только для этого нужны кой-какие телодвижения, в общем не грузитесь )
И вообще, простого "спасибо" было вполне достаточно ;-)
>Да неужели?
Угу. только для этого нужны кой-какие телодвижения, в общем не грузитесь )
И вообще, простого "спасибо" было вполне достаточно ;-)
с телодвижениями все можно.
за тип спасибо
с внимательным чтениям мануалов у меня всегда проблемы были и будут
Топикстартеру за давностью лет наверное уже не нужно, но если кто пришел по поиску как я, то вот моё (рабочее) решение фиксации события с кнопкой:
Делаю возможность смены композиций в mp3-плеере работая с одной кнопкой: нажал = включил - еще раз нажал = выключил - два раза нажал = следующая композиция - долго давлю на кнопку = увеличение звука.
в примере нет работы с музыкой. есть только получение действий с кнопкой. а это уже можно куда хотите прикрутить...
Добрый день. Наверное, уже не актуально, но добавлю свои 5 копеек. Может кому пригодится по поиску. Скетч для мультиклика. Более подробные комментарии написал на сайте. + возможность удержания кнопки и разные функции от времени удержания. arcadepub.ru/кнопка/