|  | 
|  26.08.2016, 00:02 | #1 | ||
| Новый Пользователь  Регистрация: 30.11.2014 Возраст: 45 Город: 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 Возраст: 49 Город: Самара Регион: 63, 163 Машина: Skoda Octavia A5 FL && Skoda Octavia Tour && ̶F̶F̶3̶ 
					Сообщений: 457
				          |   PHP код: 
			 | 
|   |   | 
|  26.08.2016, 17:37 | #3 | |
| Новый Пользователь  Регистрация: 30.11.2014 Возраст: 45 Город: 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 Возраст: 45 Город: 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 Возраст: 47 Город: Санкт-Петербург Регион: 54 Машина: '98 PRIUS NHW10 
					Сообщений: 1,991
				   |   дак набирай количество "приходов". каждый раз как пришло, делай ПришлоЗвукИнк++ как пришел флаг_0, сбрасывай счетчик. Если счетчик набрал >10 скажем, длинная сработала, ну или "тепленькая пошла", как тебе удобнее 
				__________________ маст{ер} c[лов]а и стил<ус>а мои детки: сивик и геша + а у него названья нет + примус + грандесла | 
|   |   | 
|  30.08.2016, 10:08 | #8 | 
| Гуру  Регистрация: 13.10.2006 Возраст: 47 Город: Санкт-Петербург Регион: 54 Машина: '98 PRIUS NHW10 
					Сообщений: 1,991
				   |   дак набирай количество "приходов". каждый раз как пришло, делай ПришлоЗвукИнк++ как пришел флаг_0, сбрасывай счетчик. Если счетчик набрал >10 скажем, длинная сработала, ну или "тепленькая пошла", как тебе удобнее 
				__________________ маст{ер} c[лов]а и стил<ус>а мои детки: сивик и геша + а у него названья нет + примус + грандесла | 
|   |   | 
|  02.10.2016, 19:42 | #9 | 
| Новый Пользователь  Регистрация: 30.11.2014 Возраст: 45 Город: 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) | |
| Опции темы | Поиск в этой теме | 
| 
 |  |