26.08.2016, 00:02 | #1 | ||
Новый Пользователь
Регистрация: 30.11.2014
Возраст: 44
Город: MoskoW
Регион: 74
Сообщений: 11
|
[Канбус] Долгое нажатие кнопки (Не резистивные кнопки!)
Ситуация в следующем работаю с каном авто, все кнокпи работают по кану.
Хочу подключить их чтобы управлять Ардуинкой в своих личных целях. Ардуина будет управлять Андройд приставкой. Имеется UNO и Atmega 2450. Написал скетч на обработку одиночного нажатия, а вот с длительным не могу справится. то есть например нажимаю 1 раз кнопку звук + и приходит 2-3 одинаковых сигнала в кан пусть будет 12345. То есть если жму долго он так и будет кидать в лог: 12345 12345 12345 12345 12345 12345 Вот мне нужно при удерживании скажем более 8 секунд сделать чтобы он выполнял другое действие. Пробовал millis() ставить, но он к сожалению не обнуляется. Пока что работает только один мой вариант по количеству, то есть если пришло в лог более 8 одинаковых сигналов 12345 то выполнять долгое действие, но это не очень удобно, так как счетчик не обнуляется а постоянно по кругу идут. Или может подскажите как обнулять счетчик если допустим между действиями прошло более скажем 3 секунд. Сейчас у меня что то типа этого: Цитата:
А нужно чтобы при длительном нажатии на кнопку другое действие. Что то типа этого : Цитата:
То есть нет срабатывания сброса как бы. Заранее благодарен, Андрей. Последний раз редактировалось admin; 20.03.2017 в 02:15. |
||
26.08.2016, 02:00 | #2 |
Старший Пользователь
Регистрация: 17.01.2010
Возраст: 48
Город: Самара
Регион: 63, 163
Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶
Сообщений: 457
|
PHP код:
|
26.08.2016, 17:37 | #3 | |
Новый Пользователь
Регистрация: 30.11.2014
Возраст: 44
Город: MoskoW
Регион: 74
Сообщений: 11
|
Цитата:
Буду разбираться. Спасибо. |
|
26.08.2016, 23:51 | #4 |
Пользователь
Регистрация: 22.01.2016
Город: СПб
Регион: 78, 98
Машина: Audi
Сообщений: 39
|
от кнопки приходят команды "нажатия" потом "отпускания"?
или приходит одна команда, а при удержании идет ее повтор? |
27.08.2016, 00:45 | #5 |
Новый Пользователь
Регистрация: 30.11.2014
Возраст: 44
Город: MoskoW
Регион: 74
Сообщений: 11
|
|
27.08.2016, 13:40 | #6 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
Приходит-приходит. Бит отвечающий за кнопку становится 0 при её отпускании.
А при удержании сообщение о нажатие кнопки повторяется раз в 100мс. |
30.08.2016, 10:06 | #7 |
Гуру
Регистрация: 13.10.2006
Возраст: 46
Город: Санкт-Петербург
Регион: 54
Машина: '98 PRIUS NHW10
Сообщений: 1,991
|
дак набирай количество "приходов". каждый раз как пришло, делай ПришлоЗвукИнк++
как пришел флаг_0, сбрасывай счетчик. Если счетчик набрал >10 скажем, длинная сработала, ну или "тепленькая пошла", как тебе удобнее
__________________
маст{ер} c[лов]а и стил<ус>а мои детки: сивик и геша + а у него названья нет + примус + грандесла |
30.08.2016, 10:08 | #8 |
Гуру
Регистрация: 13.10.2006
Возраст: 46
Город: Санкт-Петербург
Регион: 54
Машина: '98 PRIUS NHW10
Сообщений: 1,991
|
дак набирай количество "приходов". каждый раз как пришло, делай ПришлоЗвукИнк++
как пришел флаг_0, сбрасывай счетчик. Если счетчик набрал >10 скажем, длинная сработала, ну или "тепленькая пошла", как тебе удобнее
__________________
маст{ер} c[лов]а и стил<ус>а мои детки: сивик и геша + а у него названья нет + примус + грандесла |
02.10.2016, 19:42 | #9 |
Новый Пользователь
Регистрация: 30.11.2014
Возраст: 44
Город: MoskoW
Регион: 74
Сообщений: 11
|
Нет не какого флага 0 при отпускании. Вообще нет ни какого сигнала что ты отпустил кнопку.
Когда я отпускаю или держу кнопку разницы нет. Например держу, то приходит: 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0 Например нажал один раз то пришло 1,0 Вот небольшая часть кода, он работает и срабатывает лонг после 15 сигналов затем счетчик обнуляется. Но если я отпустил кнопку до этого, то в счетчике например на 7 сигнале, то там так и будет висеть 7 и обнулится только когда дойдет до 15. Вот в этом то и есть основной вопрос данной темы если допустим в счетчике накопилось 7 сигналов и при этом я кнопку не трогаю например более 2 секунд, нужно обнулять счетчик. if (rxId == 740) { UpVol = UpVol++; //Фиксируем нажатие кнопки "UpVol" if (UpRight > 15) {UpRight = 0; irsend.sendNEC(0x1FEE65D, 32); Serial.println("Звук long"); } else if (UpVol!= 0) {if (UpVol<= 12) { irsend.sendNEC(0x1FE11BF, 32); Serial.println("Звук короткое"); } |
02.10.2016, 23:24 | #10 |
Старший Пользователь
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
|
ну так millis введи туда.
unsigned long time0 = 0; if ((millis() - time0) > 2000) {Сброс переменной в ноль} В условии if (rxId == 740) time0 = millis(); И что за странный протокол передачи если нет 0? у тебя есть пакет который отвечает за кнопку(и) rxId == 740. Так вот у тебя этот ID передаётся только по нажатию кнопки чтоль? Как-то странно. Обычно при отпускании в этом ID передаются нули. и ты выше пишешь сам- нажал и пришло 1,0. Так что в ID 0-то приходит. И по идеи пакет при удержании должен выглядить как повторяющиеся еденица без 0. Хотя может такой странный протокол... |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|