долгое удержание кнопки

Viktor_Samsonov
Offline
Зарегистрирован: 16.09.2016

дело есть к вам, подскажите как сделать.

одиночное нажатие на простую кнопку дается сигнал на пин

длинное удержание(например 10 сек) дается на другой пин

 

 

 

и еще можно ли при помощи rs522 rfid так же сделать, если карта своя то короткое и длинное удержание дают напряжение на разные пины

Leonid525
Offline
Зарегистрирован: 27.09.2016

Если правильно понял, то вот http://arduino.ru/Reference/PulseIn 

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Viktor_Samsonov пишет:

дело есть к вам, подскажите как сделать.

одиночное нажатие на простую кнопку дается сигнал на пин

длинное удержание(например 10 сек) дается на другой пин

никак - что бы сделать длинное нажатие, нужно сделать одиночное нажатие.

Logik
Offline
Зарегистрирован: 05.08.2014

одиночное нажатие может зажигать первый пин по отпусканию. Если оно действительно краткое, то никто и не заметит подвоха.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

а, ещё можно по даблклику что-то делать, но ТЗ - нажатие и никак иначе.

*после длинного нажатия всегда следует отпускание - судьбу не обманешь и причинно-следственная связь настигнет тебя, если не в настоящем, то в будущем...

Logik
Offline
Зарегистрирован: 05.08.2014

После длинного нажатия уже ясно что оно было длинным и при отпускании действие соответствующее. Кстати длинного отпускания ждать не обязательно, как только длительность в состоянии нажато превысило отведеную для коротких - можно запускать действие.

ПС. обман судьбы - распостраненное явление. Ща я буду сохранять это сообщение, клацну мышой на "сохранить", а действие выполнится именно по отпусканию.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Logik пишет:

После длинного нажатия уже ясно что оно было длинным и при отпускании действие соответствующее. Кстати длинного отпускания ждать не обязательно, как только длительность в состоянии нажато превысило отведеную для коротких - можно запускать действие.

ПС. обман судьбы - распостраненное явление. Ща я буду сохранять это сообщение, клацну мышой на "сохранить", а действие выполнится именно по отпусканию.

ну, в принципе возможно, но уродский алгоритм получается.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Logik пишет:

одиночное нажатие может зажигать первый пин по отпусканию. Если оно действительно краткое, то никто и не заметит подвоха.

Очень хорошая идея! И очень вовремя. Я вот-прям-щас размышлял о том, как обработать длинное нажатие не обрабатывая короткое. Вроде очевидное решение, но, просто, очень вовремя!

Мои благодарности!

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

wdrakula пишет:

Очень хорошая идея! И очень вовремя. Я вот-прям-щас размышлял о том, как обработать длинное нажатие не обрабатывая короткое. Вроде очевидное решение, но, просто, очень вовремя!

Мои благодарности!

да, уж - хорошая.

поюзай вначале вживую эргономику такого решения - одно неверное движение и ты попал на одиночное нажатие.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Ясно, что с головой надо применять. Одиночное должно быть навигаций по меню на данном уровне, а длинное - переход на уровень вверх/вниз по меню, тогда все ОК. Если же одиночное меняет параметр, а длинное - навигационное действие - тогда да, можно гадость получить.

------------------------

И, к тому же, если взять твой "титановый велосипед", то дребезг ты уже отработал, просто вешать исполнение на отпускание, то есть уже в пользовательской программе, а драйвер - твой, "титановый", без изменений.

Если матрица 3х4 или 4х4, то, не знаю как другие, а у меня для матрицы некое подобие твоего драйвера для одной кнопки есть. Разницы никакой.

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

if(knopka нажата)

{

I++;

Delay допустим 5 милисек

if(i>50)

{делаем то что нужно например инвентируем D6

i=0;

}

if(i<50){

делаем че нужно например инвентируем D5

i=0;

}

 

}

сорри что так но смысл думаю будет ясен

renoshnik
Offline
Зарегистрирован: 11.04.2013

Вот сразу для четырех кнопок, проверено, работает...

do { i++; 
	if ((PIND&(1<<i)) == 0) { delay (250);
	if ((PIND&(1<<i)) != 0)	{duration = 0;}
	if ((PIND&(1<<i)) == 0) {duration = 1;}
		***function(); }	}
		while ( i<5 );

 

ua4lcn
Offline
Зарегистрирован: 27.02.2016

Одна кнопка — три выхода(с памятью) на Attiny13

https://www.drive2.ru/

 

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

wdrakula пишет:

И, к тому же, если взять твой "титановый велосипед", то дребезг ты уже отработал, просто вешать исполнение на отпускание, то есть уже в пользовательской программе, а драйвер - твой, "титановый", без изменений.

ну, если ты юзаешь класс титановый велосипед для тактовой кнопки, то там оговаривалось много раз, что нажатие - есть причина всего. т.е. вначале нажатие, затем стулья.

Bee
Offline
Зарегистрирован: 08.01.2016

Тоже подобное как-то икал, и Вот что нашел:

#include <Rotary.h>
#include "OneButton.h"

Rotary r = Rotary(A2, A3);
OneButton button(A1, true);

void setup() {
  Serial.begin(115200);
  PCICR |= (1 << PCIE2);
  PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
  sei();
  Serial.println("Power ON...");

  button.attachClick(ClickFunction);
  button.attachDoubleClick(DoubleclickFunction);
  button.attachLongPressStart(LongPressStartFunction);
  button.attachLongPressStop(LongPressStopFunction);
  button.attachDuringLongPress(LongPressFunction);
  
}

void loop() {
 
  button.tick();

  // You can implement other code in here or just wait a while 
  delay(10);
} 

ISR(PCINT2_vect) {
  unsigned char result = r.process();
  if (result == DIR_NONE) {
    // do nothing
  }
  else if (result == DIR_CW) {
    Serial.println("ClockWise");
  }
  else if (result == DIR_CCW) {
    Serial.println("CounterClockWise");
  }
}

void ClickFunction() {
  Serial.println("Click.");
} 


void DoubleclickFunction() {
  Serial.println("Doubleclick.");
} 


void LongPressStartFunction() {
  Serial.println("LongPress start");
} 


void LongPressFunction() {
  Serial.println("LongPress...");
} 


void LongPressStopFunction() {
  Serial.println("LongPress stop");
} 

Необходима библиотека OneButton.h

Viktor_Samsonov
Offline
Зарегистрирован: 16.09.2016

Спасибо, можешь сказать что за библиотека rotary?
Мне надо чтобы значение не с пина брало, а с переменной в моем случае sam.
Нужны ли тут 9-11строчка?
Можешь обьяснить как работает?

Viktor_Samsonov
Offline
Зарегистрирован: 16.09.2016

у меня все это происходит в большом коде и при использовании библиотеки onebutton, ошибки.

логика такая метка в зоне действия( переменная sam HIGH)

таймер считает

метка ушла из зоны действия(переменная sam LOW)

таймер остановился.

сравнивает если <или= 2сек то

действие 1.

сравнивает если > 2сек то

действие 2.

 

может использовать pulsein?

 

вродебы просто, но реализовать незнаю как.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Вы что это специально. Давно можно решить эту задачу и пить пиво. Или вы не любите пиво, вам в кайф народ будоражить?

Viktor_Samsonov
Offline
Зарегистрирован: 16.09.2016

дак ты помоги, и вопрос закрыт

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Viktor_Samsonov пишет:

дак ты помоги, и вопрос закрыт

повылазило? класс титановый велосипед для тактовой кнопки

renoshnik
Offline
Зарегистрирован: 11.04.2013

Viktor_Samsonov пишет:

дак ты помоги, и вопрос закрыт

 

Так тебе тут уже наидали куеву хучу примеров, чего еще нужно ???

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Ему не примеры нужны, а готовой код. Очевидно же...

nik182
Offline
Зарегистрирован: 04.05.2015

http://arduino.ru/forum/programmirovanie/taimery-i-programmnyi-antidrebezg-vkhodov#comment-223426

Я тут приводил кусок кода, который различает короткое и длинное нажатие. Вместо key=1 & key=2 можно вставить команды управления разными пинами. (k1cnt > 40) -  20мс х 40 = 800мс - время длинного нажатия. Изменяя 40 можно менять время чувстительности к длинному нажатию.   Для k1cht byte максимальное время около 5 секунд.

 

Bee
Offline
Зарегистрирован: 08.01.2016

Rotary можешь не использывать, она для энкодера.

У тебя библиотека #include "OneButton.h".

/*
 This is a sample sketch to show how to use the OneButtonLibrary
 to detect double-click events on a button. 
 The library internals are explained at
 http://www.mathertel.de/Arduino/OneButtonLibrary.aspx
  
 Setup a test circuit:
 * Connect a pushbutton to pin A1 (ButtonPin) and ground.
 * The pin 13 (StatusPin) is used for output attach a led and resistor to ground
   or see the built-in led on the standard arduino board.
   
 The Sketch shows how to setup the library and bind a special function to the doubleclick event.
 In the loop function the button.tick function has to be called as often as you like.
*/

Там и примеры есть

mea
Offline
Зарегистрирован: 13.07.2017

дело есть к вам, подскажите как сделать.

нажатие удерживания на простую кнопку дает сигнал на лед 1 загораеца на 5секунд и тухнет.

при отпускания кнопки загорается лед 2 и тоже на 5 сек гаснет.

может кто помочь пожалуйста 

b707
Offline
Зарегистрирован: 26.05.2017

курсовая небось? сам делай, примеров тут полно. В шапке вон аж три или четыре темы про кнопки

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

mea .Решение #21

mea
Offline
Зарегистрирован: 13.07.2017

спасибо ...балшое 

но мне нужна нимношка падругому 

вот как .....

есть иммобилайзер для машины с пультом .он работает так при ближеня он падаеюот сигнал што пулт в зоне дествия.
но падают в мигание сигнала частотой 1 сек .итак нужна штобы ардуина читал присуствия при маргание и вклучил на 5 секунд реле аткрытия двереи.
кагда нету в зоне пулта маргание света диода,
тоже апределил ардуино как сигнал на закрываниа двереи 5сек .и на закрытия нужна выход постоянный -минус или +  для блокировки старт стопа
но при приближеня отпираня двереи выключился сигнал блокировки.но закрытия и отпираня было оделно пинов для реле .
 
mea
Offline
Зарегистрирован: 13.07.2017

если сможеш фсио зделати я тебе заплачу денгами

MeBo
Offline
Зарегистрирован: 20.12.2018

qwone, есть одна задачка:

Мониторчик LCD1062(16х2)

Долгое нажатие кнопки должно выключать подсветку(зеленую)

MeBo
Offline
Зарегистрирован: 20.12.2018

#29

Green
Offline
Зарегистрирован: 01.10.2015

MeBo пишет:

qwone, есть одна задачка:

По моему, это унизительно. Только за деньги!

MaksVV
Offline
Зарегистрирован: 06.08.2015

пальцем щелкнуть забыл