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

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

одна кнопка:


#include <Click.h>

Click test;

byte          duration_bounce        =    5;
byte          duration_click_Db      =  250;
unsigned long duration_inactivity_Up = 5000;
unsigned long duration_inactivity_Dn = 1000;

void setup() {
pinMode( 3, INPUT_PULLUP); // pin button
test.init(!digitalRead(3));
}

void loop() {

test.read(!digitalRead(3), duration_bounce, duration_click_Db, duration_inactivity_Up, duration_inactivity_Dn);

if (test.state_soft         () == 1) {}
if (test.state_inactivity_Dn() == 1) {}
if (test.state_inactivity_Up() == 1) {}
if (test.event_click_Dn     () == 1) {}
if (test.event_click_Up     () == 1) {}
if (test.event_click_Db     () == 1) {}
if (test.event_inactivity_Dn() == 1) {}
if (test.event_inactivity_Up() == 1) {}

}

несколько кнопок:


#include <Button.h>

Button test;

void setup() {
test.button( 4, 5, 6, 7, 8); // arduino pins connected to button
// test.button();
test.duration_bounce          (5);
test.duration_click_Db      (250);
test.duration_inactivity_Up(5000);
test.duration_inactivity_Dn(1000);
// test.pullUp();
// test.pullDn();
}

void loop() {

test.read();

if (test.button[0].state_soft         () == 1) {}
if (test.button[0].state_inactivity_Dn() == 1) {}
if (test.button[0].state_inactivity_Up() == 1) {}
if (test.button[0].event_click_Dn     () == 1) {}
if (test.button[0].event_click_Up     () == 1) {}
if (test.button[0].event_click_Db     () == 1) {}
if (test.button[0].event_inactivity_Dn() == 1) {}
if (test.button[0].event_inactivity_Up() == 1) {}
//     *.button[1].*
//     *.button[2].*
//     *.button[3].*
if (test.button[4].state_soft         () == 1) {}
if (test.button[4].state_inactivity_Dn() == 1) {}
if (test.button[4].state_inactivity_Up() == 1) {}
if (test.button[4].event_click_Dn     () == 1) {}
if (test.button[4].event_click_Up     () == 1) {}
if (test.button[4].event_click_Db     () == 1) {}
if (test.button[4].event_inactivity_Dn() == 1) {}
if (test.button[4].event_inactivity_Up() == 1) {}

if (test.state_soft                   () == 1) {}
if (test.state_inactivity_Dn          () == 1) {}
if (test.state_inactivity_Up          () == 1) {}
if (test.event_click_Dn               () == 1) {}
if (test.event_click_Up               () == 1) {}
if (test.event_click_Db               () == 1) {}
if (test.event_inactivity_Dn          () == 1) {}
if (test.event_inactivity_Up          () == 1) {}

}

матрица кнопок:


#include <Matrix.h>

Matrix test;

void setup() {
test.matrix_x( 4,  5,  6,  7,  8); // arduino pins connected to rows
test.matrix_y(17, 18, 19, 20);     // arduino pins connected to columns
// test.matrix_x();
// test.matrix_y();
test.duration_bounce          (5);
test.duration_click_Db      (250);
test.duration_inactivity_Up(5000);
test.duration_inactivity_Dn(1000);
// test.pullUp();
// test.pullDn();
// test.NKRO();
// test.TKRO();

}

void loop() {

test.read();

if (test.matrix[0][0].state_soft         () == 1) {}
if (test.matrix[0][0].state_inactivity_Dn() == 1) {}
if (test.matrix[0][0].state_inactivity_Up() == 1) {}
if (test.matrix[0][0].event_click_Dn     () == 1) {}
if (test.matrix[0][0].event_click_Up     () == 1) {}
if (test.matrix[0][0].event_click_Db     () == 1) {}
if (test.matrix[0][0].event_inactivity_Dn() == 1) {}
if (test.matrix[0][0].event_inactivity_Up() == 1) {}
//     *.matrix[x][y].*
if (test.matrix[4][3].state_soft         () == 1) {}
if (test.matrix[4][3].state_inactivity_Dn() == 1) {}
if (test.matrix[4][3].state_inactivity_Up() == 1) {}
if (test.matrix[4][3].event_click_Dn     () == 1) {}
if (test.matrix[4][3].event_click_Up     () == 1) {}
if (test.matrix[4][3].event_click_Db     () == 1) {}
if (test.matrix[4][3].event_inactivity_Dn() == 1) {}
if (test.matrix[4][3].event_inactivity_Up() == 1) {}

if (test.state_soft                      () == 1) {}
if (test.state_inactivity_Dn             () == 1) {}
if (test.state_inactivity_Up             () == 1) {}
if (test.event_click_Dn                  () == 1) {}
if (test.event_click_Up                  () == 1) {}
if (test.event_click_Db                  () == 1) {}
if (test.event_inactivity_Dn             () == 1) {}
if (test.event_inactivity_Up             () == 1) {}

}

 

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

README.md

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
титановый велосипед для кнопки. (версия 7.0)
https://github.com/Klapautsiy/titanium-bicycle-for-button
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

инсталляция:
-------------
распаковать и поместить папку с файлами в папку с библиотеками Arduino IDE.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
файл Click.h - класс Click, логический блок.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

переменные:
------------
state_raw          () - необработанное состояние кнопки
state_soft         () - программное состояние кнопки
state_inactivity_Up() - состояние таймера неактивности ненажатой кнопки
state_inactivity_Dn() - состояние таймера неактивности   нажатой кнопки

event_click_Up     () - событие отпускания
event_click_Dn     () - событие нажатия
event_click_Db     () - событие двойного щелчка
event_inactivity_Up() - событие неактивности ненажатой кнопки
event_inactivity_Dn() - событие неактивности   нажатой кнопки

функции:
---------
init(state_raw)        - инициализация
read(state_raw, duration_bounce, duration_click_Db, duration_inactivity_Up,
duration_inactivity_Dn) - опрос кнопки
где:
state_raw              - необработанное состояние кнопки
duration_bounce        - длительность таймера фильтра дребезга
duration_click_Db      - длительность таймера двойного щелчка
duration_inactivity_Up - длительность таймера неактивности ненажатой кнопки
duration_inactivity_Dn - длительность таймера неактивности   нажатой кнопки

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
файл Button.h - класс-оболочка для класс Click, кнопки.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

класс Button создаёт массив button экземпляров класса Click, производит опрос
кнопок, подключенных к пинам и передачу их состояний массиву экземпляров класса
Click.

передача параметров:
---------------------
button(*,...) - указание номеров пинов, подключенных к кнопкам.

duration_bounce       (time) - передача длительности таймера фильтра дребезга.
duration_click_Db     (time) - передача длительности таймера двойного щелчка.
duration_inactivity_Up(time) - передача длительности таймера неактивности ненажатой кнопки.
duration_inactivity_Dn(time) - передача длительности таймера неактивности   нажатой кнопки.

активация настроек:
--------------------
pullUp() - подтяжка пинов кнопок к Vcc.
pullDn() - подтяжка пинов кнопок к GND.

одноименные переменным класса Click возвращают логическое "ИЛИ" значений
одноименных переменных состояний и событий экземпляров класса Click.

передача параметров приводит к активации настроек по-умолчанию.

последующая передача параметров и явная активация настроек приводит к их
обновлению.

порядок передачи параметров и активации настроек не имеет значения.

вызов button() без параметров приводит к удалению массива button.

опрос кнопок производится вызовом функции read().

настройки по-умолчанию позволяют реализовать подключение кнопок к пинам
контроллера без дополнительных элементов.

при активации режима pullUp настройками по-умолчанию или явно для увеличения
помехозащищённости пины кнопок нужно подключать через резисторы 10KOm к Vcc.

при активации режима pullDn, подключение пинов кнопок к GND через резисторы
10KOm обязательно.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
файл Matrix.h - класс-оболочка для класс Click, матрица кнопок.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

класс Matrix создаёт двумерный массив matrix экземпляров класса Click,
производит опрос кнопок, подключенных к матрице и передачу их состояний массиву
экземпляров класса Click.

передача параметров:
---------------------
matrix_x(*,...)              - передача номеров пинов, подключенных к колонкам матрицы.
matrix_y(*,...)              - передача номеров пинов, подключенных к строкам матрицы.

duration_bounce       (time) - передача длительности таймера фильтра дребезга.
duration_click_Db     (time) - передача длительности таймера двойного щелчка.
duration_inactivity_Up(time) - передача длительности таймера неактивности ненажатой кнопки.
duration_inactivity_Dn(time) - передача длительности таймера неактивности   нажатой кнопки.

активация настроек:
--------------------
pullUp() - подтяжка пинов строк к Vcc.
pullDn() - подтяжка пинов строк к GND.
NKRO()   - режим No Key Rollover.
TKRO()   - режим  2-Key Rollover.

одноименные переменным класса Click возвращают логическое "ИЛИ" значений
одноименных переменных состояний и событий экземпляров класса Click.

передача параметров приводит к активации настроек по-умолчанию.

последующая передача параметров и явная активация настроек приводит к их
обновлению.

порядок передачи параметров и активации настроек не имеет значения.

вызов matrix_x() и matrix_y() без параметров приводит к удалению
массива matrix.

опрос кнопок производится вызовом функции read().

настройки по-умолчанию позволяют реализовать подключение матрицы к пинам
контроллера и кнопок к матрице без дополнительных элементов в режиме
2-Key Rollover.

при активации режима No Key Rollover кнопки нужно подключать к матрице через
диоды.

при активации режима pullUp настройками по-умолчанию или явно для увеличения
помехозащищённости пины строк нужно подключать через резисторы 10KOm к Vcc.

при активации режима pullDn, подключение пинов строк к GND через резисторы
10KOm обязательно.

 

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

 

визуализация переменных https://klapautsiy.github.io/titanium-bicycle-for-button/

reset - сброс и начало отсчёта времени
button - та самая кнопка
 
системное время кнопки замедлено в 60 раз, поэтому нажимаем и удерживаем кнопку долее 1.2 секунды, что бы сбросился фильтр дребезга и случилось нажатие
 
чекбоксами выбрать комбинации графиков переменных
мышью по графику выделить интересующий участок - масштабируется, двойной клик - вернётся к 1:1
 
*удачного залипания \о
 
 
Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017
заметка о безопасности Matrix.h:
 
вопрос: возможно ли повредить пины строк, которые сконфигурированы как выход при опросе кнопок, если перепутать/замкнуть два/все пины матрицы кнопок?
ответ: нет.
Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

проект титановый велосипед для кнопки в данный момент находится в состоянии жёсткого релиза.

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

*всем заинтересованным лицам, бобро пожаловаться в тему.

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

ну, не знаю - написать и нарисовать шопопало...

и вы так фильтр дребезга пишете?

http://www.atmel.com/Images/doc2532.pdf

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

сколько всего появилось

 

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

здесь пишу вики-справочник.

предлагайте, какие пункты нужно расписать подробно.

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

Клапауций 112 пишет:

ну, не знаю - написать и нарисовать шопопало...

и вы так фильтр дребезга пишете?

http://www.atmel.com/Images/doc2532.pdf

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

автоматическая выключалка света в проходной коридор


#include <Click.h>

Click test;

void setup() {
pinMode     (13, OUTPUT      ); // pin LED
pinMode     ( 3, INPUT_PULLUP); // pin button
test.init(!digitalRead(3));
}

void loop() {
test.read(!digitalRead(3), 20, 200, 60000, 2000);
digitalWrite(13, test.state_inactivity_Up());
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

вот вот. примеры это удобно

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

jeka_tm пишет:

вот вот. примеры это удобно

примеры идут в комплекте пакета библиотеки в папке examples

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а тут понятнее. еще бы что означают коэффициенты... я не понимаю, интернетом пользоваться не умею

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

jeka_tm пишет:

прошу переписать попроще

я же только что переписал лично для тебя - куда же проще?

Клапауций 112 пишет:

иди нахуй, йобаный троляка.

jeka_tm пишет:

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

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

Клапауций 112 пишет:

визуализация переменных https://klapautsiy.github.io/titanium-bicycle-for-button/

reset - сброс и начало отсчёта времени
button - та самая кнопка
 
системное время кнопки замедлено в 60 раз, поэтому нажимаем и удерживаем кнопку долее 1.2 секунды, что бы сбросился фильтр дребезга и случилось нажатие
 
чекбоксами выбрать комбинации графиков переменных
мышью по графику выделить интересующий участок - масштабируется, двойной клик - вернётся к 1:1
 
*удачного залипания \о
 
 

если совсем в танке - нужно нажать на ссылко https://klapautsiy.github.io/titanium-bicycle-for-button/

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

читал, половину осилил. как на лекции по философии. написано как будто не для людей

короче забей

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

jeka_tm пишет:

читал, половину осилил. как на лекции по философии. написано как будто не для людей

короче забей

ну, какую половину, чего ты осилил?

открываешь файл Matrix.h или Button.h и?.. что это такое?

byte          duration_bounce_       ; // длительность таймера фильтра дребезга
byte          duration_click_Db_     ; // длительность таймера двойного щелчка
unsigned long duration_inactivity_Up_; // длительность таймера неактивности ненажатой кнопки
unsigned long duration_inactivity_Dn_; // длительность таймера неактивности   нажатой кнопки

ну, да - не для людей. 

в файле реадми

read(state_raw, duration_bounce, duration_click_Db, duration_inactivity_Up,
duration_inactivity_Dn) - опрос кнопки
где:
state_raw              - необработанное состояние кнопки
duration_bounce        - длительность таймера фильтра дребезга
duration_click_Db      - длительность таймера двойного щелчка
duration_inactivity_Up - длительность таймера неактивности ненажатой кнопки
duration_inactivity_Dn - длительность таймера неактивности   нажатой кнопки

 

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

повторюсь

Клапауций 112 пишет:

здесь пишу вики-справочник.

предлагайте, какие пункты нужно расписать подробно.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

по примеру 414 поста только со всеми параметрами что за что отвечает

+ вообще я в примере кнопку давно понажимал. не разобрался честно сказать, только длинное нажание четко понятно. возможно дело в том что графики все на одном и все сливается. можно сделать как в лог анализаторе, первый график это кнопка, второй одинарное нажатие, двойное нажатие и т.д. ведь с каждой кнопки можно разные состояния брать, почему бы тогда и графики не сделать раздельные. мне кажется сразу понятнее будет

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

jeka_tm пишет:

по примеру 414 поста только со всеми параметрами что за что отвечает

в посте #414 был задан риторический вопрос и сделан скриншот, где инженеры Атмел неправильно нарисовали  фильтр дребезга.

в посте #417 правильный фильтр дребезга.

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

я сделал одинарное нажатие, потом двойное, затем длинное. и вот что я должен из этого понять? ну похоже у меня iq намного ниже твоего раз тебе все понятно, а мне нет. это в продолжение 437 поста

в 417 действительно хорошо нарисовано и понятно

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

jeka_tm пишет:

почему бы тогда и графики не сделать раздельные. мне кажется сразу понятнее будет

это я для чего писал? ты пробовал в галки мышью тыкать?

Клапауций 112 пишет:

чекбоксами выбрать комбинации графиков переменных
мышью по графику выделить интересующий участок - масштабируется, двойной клик - вернётся к 1:1

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

 

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

jeka_tm пишет:

 

и вот что я должен из этого понять? 

ничего, пока не прочитаешь и не поймёшь файл README.txt

ты же его не читал совсем, от слова совсем, но солгал, что прочитал до половины.

что я должен начать понимать, когда собеседник мне нагло врёт? - правильно: такого собеседника нужно посылать нахуй.

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

jeka_tm пишет:

представь ты только прочитал мануал и решил потестить.

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

нет. пока не будет человеческого описания. раз куча параметров которые отвечают за временные параметры, то есть близкие по функциональности, и сливаюттся в одну кашу, то без нормальной картинки хотя бы: это библиотека которая неизвестно как работает. нужно собирать макет, лог. анализатор и вперед тестировать

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

jeka_tm пишет:

нет. пока не будет человеческого описания. раз куча параметров которые отвечают за временные параметры, то есть близкие по функциональности, и сливаюттся в одну кашу, то без нормальной картинки хотя бы: это библиотека которая неизвестно как работает. нужно собирать макет, лог. анализатор и вперед тестировать

ок.

кому в тексте ниже:
параметры сливаются в одну кашу?
непонятно описалово параметров?
кому незнакомы понятия состояние , событие?
read(state_raw, duration_bounce, duration_click_Db, duration_inactivity_Up,
duration_inactivity_Dn) - опрос кнопки
где:
state_raw              - необработанное состояние кнопки
duration_bounce        - длительность таймера фильтра дребезга
duration_click_Db      - длительность таймера двойного щелчка
duration_inactivity_Up - длительность таймера неактивности ненажатой кнопки
duration_inactivity_Dn - длительность таймера неактивности   нажатой кнопки

 

 

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

jeka_tm пишет:

человек задаст вопрос, а в ответ получит: 

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

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

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

напоминаю ещё раз - ты ничего не читал. как тебе могло, внезапно, стать непонятно?

*третий раз послать лжеца и недотролля?

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

жмём кнопку "mode graph" и будет как в лох-анализаторе #434

https://klapautsiy.github.io/titanium-bicycle-for-button/

но файл README.txt нужно читать полюбому.

Click.png

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а можно еще подписать где что? прямо возле графика. обещаю прочитать)))

а чего сразу лох-анализатор? осадочек остался?))

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

jeka_tm пишет:

а можно еще подписать где что? прямо возле графика. обещаю прочитать)))

можно - я разрешаю.

всё добро лежит здесь https://github.com/Klapautsiy/titanium-bicycle-for-button/tree/master/docs - жми кпопку "Fork" и писай.

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

добавил описалово всех функций в вики https://github.com/Klapautsiy/titanium-bicycle-for-button/wiki

втыкаем в примеры https://github.com/Klapautsiy/titanium-bicycle-for-button/tree/BUTTON-v7.0/examples и достигаем просветления

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

безуспешно пытаюсь выяснить источник ереси "короткие и длинные нажатия".

откуда это берётся и зачем народ упорно пытается реализовать сущность, противоречащую причинно-следственным связям?

vvadim
Offline
Зарегистрирован: 23.05.2012

дык наверно им так удобно

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

vvadim пишет:

дык наверно им так удобно

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

vvadim
Offline
Зарегистрирован: 23.05.2012

в велосипеде не получается

при длинном проскакивает короткое)))

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

vvadim пишет:

в велосипеде не получается

при длинном проскакивает короткое)))

только в велосипеде не получается? 
а, где получается? 
приведи один пример промышленной или любительской реализации нарушения причинно-следственной связи.
vvadim
Offline
Зарегистрирован: 23.05.2012

OneButton, ClickButton

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

vvadim пишет:

OneButton, ClickButton

в OneButton заявлены функции одиночный клик, двойной клик, нажатие и удержание - т.е. нажатие и удержание без обработки одиночного клика невозможно физически.

в ClickButton пишут: 

Long clicks (hold button for one second or longer on last click):

Длинные клики (удерживайте кнопку в течение одной секунды или дольше при последнем нажатии):

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

*я просил подумать, а не бессмысленно тратить моё время.

vvadim
Offline
Зарегистрирован: 23.05.2012

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

mobistrike
mobistrike аватар
Offline
Зарегистрирован: 19.08.2016

Клапауций 112 пишет:

vvadim пишет:

OneButton, ClickButton

 

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

 

А потом искать библиотеку отслеживающую длинный клик.

Выше сказали    -  OneButton, ClickButton и мой пост #401  .

ЗЫ. README.txt читал. 

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

vvadim пишет:

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

код примера, где короткий клик инвертирует один пин, а длинный - другой пин, можно посмотреть?

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

mobistrike пишет:

А потом искать библиотеку отслеживающую длинный клик.

и ты мне пример напиши, пожалуйста.

vvadim
Offline
Зарегистрирован: 23.05.2012

Клапауций 112 пишет:

vvadim пишет:

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

код примера, где короткий клик инвертирует один пин, а длинный - другой пин, можно посмотреть?

OneButton
короткое нажатие - клик
длительное нажатие - длинный клик

велосипед
короткое нажатие - клик
длительное нажатие - клик, потом длинный клик
 

 

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

vvadim пишет:

OneButton
короткое нажатие - клик
длительное нажатие - длинный клик

велосипед
короткое нажатие - клик
длительное нажатие - клик, потом длинный клик
 

ну, напиши мне это в примере, что бы я не орал, что это невозможно теоретически.

if (короткое нажатие) digitalWrite(14, !digitalRead(14));
if (длинное  нажатие) digitalWrite(15, !digitalRead(15));

 

vvadim
Offline
Зарегистрирован: 23.05.2012

меня только это интересует

if (короткое нажатие) digitalWrite(14, HIGH);
if (длинное нажатие)  digitalWrite(14, LOW);

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

vvadim пишет:

меня только это интересует

if (короткое нажатие) digitalWrite(14, HIGH);
if (длинное нажатие)  digitalWrite(14, LOW);

т.е. примера, подтверждающего

vvadim пишет:

OneButton
короткое нажатие - клик
длительное нажатие - длинный клик

не будет?

 

mobistrike
mobistrike аватар
Offline
Зарегистрирован: 19.08.2016

Клапауций 112 пишет:

mobistrike пишет:

А потом искать библиотеку отслеживающую длинный клик.

и ты мне пример напиши, пожалуйста.

Легко .

Пример с библиотекой ClickButton

 

if (button1.click == -1) {
 // Serial.println("long click");
  a0=a0+1;
  }
 
 if (button1.click == 1) {     
 // Serial.println("click");
   a1=a1+1;  
  } 

Код полностью - собирал товарищу треканальный коммутатор видеосигналов на LCD 1202. Упраляет микросхемами la7958n . Длинный клик - выбор источника видео(их 3). Короткий - коммутация между тремя телевизорами от выбранного источника. 

#include "lcd1202.h"
#include "ClickButton.h"

// the LED
//const int ledPin = 13;
//int ledState = 0;

// the Button
const int buttonPin1 = 2;
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);

// Arbitrary LED function 
//int LEDfunction = 0;
LCD1202 lcd(6, 5, 4, 3);  // RST, CS, MOSI, SCK
int a1=1;
int b1=1;
int c1=1;
int aa=1;





void setup() {
 
lcd.Inicialize();  //Инициализация дисплея
lcd.Clear_LCD();  //Очистка дисплея
//pinMode(ledPin,OUTPUT);  

  // Setup button timers (all in milliseconds / ms)
  // (These are default if not set, but changeable for convenience)
  button1.maxPresses     = 3;    // max button multiclick count
  button1.debounceTime   = 20;   // Debounce timer in ms
  button1.multiclickTime = 250;  // Time limit for multi clicks
  button1.heldDownTime   = 1000; // time until "held-down clicks" register
//Serial.begin(9600);

// выходы на коммутатор
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);

pinMode(9, OUTPUT);
pinMode(10, OUTPUT);

pinMode(11, OUTPUT);
pinMode(12, OUTPUT);

}

void loop() {
 button1.Update();
 



if (button1.click == -1) {
 // Serial.println("long click");
  aa=aa+1;
  }


if (aa>3) {     
 aa=1;     
  } 




//****************первый канал  
 if (aa==1) {     
 if (button1.click == 1) {     
   a1=a1+1;  

  } 
  if (a1>3){
  a1=1;
  }
  }
   
 //*****************************

 //второй канал 
 if (aa==2) {     
 if (button1.click == 1) {     
   b1=b1+1;  

  } 
  if (b1>3){
  b1=1;
  }
  }
//********************************

//третий канал  
 if (aa==3) {     
if (button1.click == 1) {     
   c1=c1+1;  

  } 
  if (c1>3){
  c1=1;
 }
  }
 //*********************************

//..**********************вывод на экран****************** 
lcd.Clear_LCD();  //Очистка дисплея
//***************************************** Рисуем по координатам скругленный прямоугольник *************************************************

lcd.drawRoundRect(1, 10, 30, 50, 10, 1);     //Рисуем скругленный прямоугольник по координатам x, y, высота, ширина, радиус скругления, цвет
lcd.drawRoundRect(32, 10, 30, 50, 10, 1);
lcd.drawRoundRect(63, 10, 30, 50, 10, 1);
//lcd.simb16x32(8, 17, 1, 8);            //Выводим в координаты x, y, цветом 1, цифру 
//lcd.simb16x32(39, 17, 1, 8);   
//lcd.simb16x32(70, 17, 1, 8);  
                            

//********************************************************************************



//****************первый канал  
 if (aa==1) {     
 //******************************************* Рисуем закрашенный, скругленный прямоугольник *************************************************

lcd.fillRoundRect(1, 10, 30, 50, 10, 1);     //Рисуем закрашенный, скругленный прямоугольник по координатам x, y, высота, ширина, радиус скругления, цвет
//lcd.fillRoundRect(32, 10, 30, 50, 10, 1);
//lcd.fillRoundRect(63, 10, 30, 50, 10, 1);
lcd.simb16x32(8, 17, 0, a1);            //Выводим в координаты x, y, цветом 1, цифру 
//lcd.simb16x32(8, 17, 1, 8);            //Выводим в координаты x, y, цветом 1, цифру 
lcd.simb16x32(39, 17, 1, b1);   
lcd.simb16x32(70, 17, 1, c1);  

//**************************************************************
  } 
  
   
 //*****************************

 //второй канал 
 if (aa==2) {     
 //******************************************* Рисуем закрашенный, скругленный прямоугольник *************************************************

//lcd.fillRoundRect(1, 10, 30, 50, 10, 1);     //Рисуем закрашенный, скругленный прямоугольник по координатам x, y, высота, ширина, радиус скругления, цвет
lcd.fillRoundRect(32, 10, 30, 50, 10, 1);
//lcd.fillRoundRect(63, 10, 30, 50, 10, 1);
//lcd.simb16x32(8, 17, 0, 8);            //Выводим в координаты x, y, цветом 1, цифру 
lcd.simb16x32(39, 17, 0, b1);   
lcd.simb16x32(8, 17, 1, a1);            //Выводим в координаты x, y, цветом 1, цифру 
//lcd.simb16x32(39, 17, 1, 8);   
lcd.simb16x32(70, 17, 1, c1);  
//**************************************************************
  }
//********************************

//третий канал  
 if (aa==3) {     
//******************************************* Рисуем закрашенный, скругленный прямоугольник *************************************************

//lcd.fillRoundRect(1, 10, 30, 50, 10, 1);     //Рисуем закрашенный, скругленный прямоугольник по координатам x, y, высота, ширина, радиус скругления, цвет
//lcd.fillRoundRect(32, 10, 30, 50, 10, 1);
lcd.fillRoundRect(63, 10, 30, 50, 10, 1);
//lcd.simb16x32(8, 17, 0, 8);            //Выводим в координаты x, y, цветом 1, цифру 
//lcd.simb16x32(39, 17, 0, 8);   
lcd.simb16x32(70, 17, 0, c1);   
lcd.simb16x32(8, 17, 1, a1);            //Выводим в координаты x, y, цветом 1, цифру 
lcd.simb16x32(39, 17, 1, b1);   
//lcd.simb16x32(70, 17, 1, 8);  
//**************************************************************
  }
 //*********************************
 if (a1==1){
 digitalWrite(7, LOW); 
 digitalWrite(8, LOW);
 }
 if (a1==2){
 digitalWrite(7, HIGH); 
 digitalWrite(8, LOW);
  
 }
 if (a1==3){
  digitalWrite(7, LOW); 
 digitalWrite(8, HIGH);
 
 }
if (b1==1){
 digitalWrite(9, LOW); 
 digitalWrite(10, LOW);
  
 }
 if (b1==2){
 digitalWrite(9, HIGH); 
 digitalWrite(10, LOW);
  
 }
 if (b1==3){
  digitalWrite(9, LOW); 
 digitalWrite(10, HIGH);
  
 }
 if (c1==1){
 digitalWrite(11, LOW); 
 digitalWrite(12, LOW);
  
 }
 if (c1==2){
 digitalWrite(11, HIGH); 
 digitalWrite(12, LOW);
  
 }
 if (c1==3){
  digitalWrite(11, LOW); 
 digitalWrite(12, HIGH);
  
 }


lcd.Update();




}

 

 

 

 

vvadim
Offline
Зарегистрирован: 23.05.2012
#include "OneButton.h"

OneButton start(4, true);

void setup() 
{
  pinMode(13, OUTPUT);
  start.attachClick(Click);
  start.attachLongPressStart(LongPressStart); 
}

void loop() 
{ 
  start.tick();
}

void Click()
{
  digitalWrite(13, HIGH);
}

void LongPressStart()
{
  digitalWrite(13, LOW);
}

 

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

mobistrike пишет:

Легко .

ну, я же просил дать полный рабочий пример кода типа:

if (короткое нажатие) digitalWrite(14, !digitalRead(14));
if (длинное  нажатие) digitalWrite(15, !digitalRead(15));

а не выкладывать все свои исходники.

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

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

vvadim пишет:

#include "OneButton.h"

OneButton start(4, true);

void setup() 
{
  pinMode(13, OUTPUT);
  start.attachClick(Click);
  start.attachLongPressStart(LongPressStart); 
}

void loop() 
{ 
  start.tick();
}

void Click()
{
  digitalWrite(13, HIGH);
}

void LongPressStart()
{
  digitalWrite(13, LOW);
}

велосипед делает то же самое: кликом включает, удержанием выключает светодиод.

#include <Click.h>

Click test;

void setup() {
pinMode     (13, OUTPUT      ); // pin LED
pinMode     ( 3, INPUT_PULLUP); // pin button
test.init(!digitalRead(3));
}

void loop() {
test.read(!digitalRead(3), 20, 200, 1000, 1000);
if (test.event_click_Dn     ()) {digitalWrite(14, HIGH);}
if (test.event_inactivity_Dn()) {digitalWrite(14, LOW );}
}

но, я хочу убедиться, что OneButton не генерит клик перед длинным кликом - как мне это сделать?