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

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Не желаете воспользоваться этим? А то автор темы Вас пошлёт на север и, таки, будет прав...

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

skalinas пишет:

Клапауций 555 посмотри, так будет работать библиотека, может чего лишнего добавил?

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

потому, как вот это меня смущает:

boolean  event_press_long   () {return (event_press1     () == 1 && state_button() == 1);}

оригинальный event_press_long () будет продолжать работать так, как я задумал или всех ползателей велосипеда ожидает приятный сюпрайз?

может быть, нужно было так сделать? :

boolean  event_press_long   () {return (event_press    () == 1 && state_button() == 1);}
boolean  event_press_long1  () {return (event_press1   () == 1 && state_button() == 1);}

*плюс концептуальный недостаток добавления unsigned event_press1 в структуру click - размер структуры увеличится с 1-го байта до 2-байт, что отразится на потреблении ОЗУ одного экземпляра класса: +1 байт на одну кнопку - было 9 байт, станет 10 байт.

skalinas пишет:

Выше скетч под эту библиотеку.

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

 

skalinas
Offline
Зарегистрирован: 13.01.2016

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

boolean  event_press_long   () {return (event_press    () == 1 && state_button() == 1);}
boolean  event_press_long1  () {return (event_press1   () == 1 && state_button() == 1);}

Да можно и так сделать, только на пример назвать boolean event_press_long1, так boolean event_press_long_flag - флаг длинного  нажатия кнопки

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

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

Не рассматривал, сделать велосипед для аналоговых кнопок (когда на одном пине висит несколько кнопок - до 5), там объем памяти меньше жрет. Тут выкладывал скетч на 5 кнопок, идея такая кроме сравнения двух измерений по времени еще сравнивается их уровень АЦП. Если уровни АЦП совпадают, то проверяется состояние измерений(сравниваются измерения через 10..50мС).

 

 

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

skalinas пишет:

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

мой вопрос подразумевал два варианта ответа "да"/"нет".

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

skalinas пишет:

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

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

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

skalinas пишет:

Не рассматривал, сделать велосипед для аналоговых кнопок...

не рассматривал и рассматривать не собираюсь.

Клапауций 555
Offline
Зарегистрирован: 10.03.2018
GarryC, извини, но я удалю твои бесполезные для меня ответы на мой конкретный вопрос: "где нужно в коде велосипеда делать рефакторинг и, главное - зачем?".
пока твои ответы - ниочём.

 

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

картинко для привлечения внимания. а, то как-то захирела темка.

https://github.com/Klapautsiy/titanium-bicycle-for-button/wiki/synopsis

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Одновременное нажатие кнопок обрабатывается?

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

Tomasina пишет:

Одновременное нажатие кнопок обрабатывается?

ну, как "одновременное"? - мы же в аппаратно одноядерной системе, программно в последовательном цикле void loop() .

субъективно - "да".

фактически - ВСЕ кнопки обрабатываются последовательно в том порядке, как они прописаны в тексте скетча.

см. примеры в папке examples архива на гитхабе https://github.com/Klapautsiy/titanium-bicycle-for-button/releases

например:

void loop() {

test.read();

if (test.event_click_Db (0) == 1) {}
if (test.event_click_Db (5) == 1) {}
if (test.event_click_Db (2) == 1) {}
if (test.event_click_Db (1) == 1) {}

}

опрос события клика кнопок 0, 5, 2, 1 - если, внезапно, важна последовательность опроса кнопок.

обычно - достаточно последовательно или в любом порядке опрашивать кнопки.

отвлёкся...

т.е. в loop кнопки обрабатываются последовательно - если loop принимать как "опрос кнопок", то "да" - обрабатывается одновременное нажатие кнопок.

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

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

NKRO()   - режим No-Key Rollover (обрабатываются все кнопки - диоды обязательны)
OKRO()   - режим  1-Key Rollover (обрабатывается первая нажатая кнопка - диоды не обязательны)
TKRO()   - режим  2-Key Rollover (обрабатывается первые две нажатых кнопки - диоды диоды не обязательны)
 
*всё кратко в файле README.txt, чуть теории в вики https://github.com/Klapautsiy/titanium-bicycle-for-button/wiki/synopsis
 
ну, и понятно, что код библиотеки - неблокирующий основной цикл. считываются состояния пинов, сохраняется в переменные, переменные интерпретируются экземпляром класса в контекст событий-состояний одной кнопки, все экземпляры класса хранятся в одно(если кнопки подключены непосредственно к пинам дуино) или двумерном массиве(подключение тип "матрица")
===============
 
если всё, что выше - очень сложно, то "да" - можно наступить на пульт из 100 кнопок и они сработают.
Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Говори проще: "если сделать прямоугольную матрицу кнопок и сесть на неё, то можно нарисовать контур задницы с точностью до половины расстояния между кнопками" :)

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

Ворота пишет:

Говори проще: "если сделать прямоугольную матрицу кнопок и сесть на неё, то можно нарисовать контур задницы с точностью до половины расстояния между кнопками" :)

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

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

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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Бояца оне тебя, Клапа. Ты ж их всех в Сугрут посылать начнёшь, в произвольной форме.  Или в Тыву, искать обломки скрашеного звездолёта. 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

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

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

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

та, да - я запретил закомментить ненужное.

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

DetSimen пишет:

Бояца оне тебя, Клапа. Ты ж их всех в Сугрут посылать начнёшь, в произвольной форме.  Или в Тыву, искать обломки скрашеного звездолёта. 


ты прав - в Сургут пешком ушли тупые, хейтеры, пидагоги и профессионалы.

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

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

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Да зачем, меня свое устраивает, не старайтесь.

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

Kakmyc пишет:
Да зачем, меня свое устраивает, не старайтесь.

ок.
не буду.

Гриша
Offline
Зарегистрирован: 27.04.2014

ИМХО не знаю кому как,  а я не парюсь и просто пользую... если кому требуется что-то очень быстрое и специальное НИКОГДА не будет использовать универсальное. Я давно уже закатал велики в библы, и при необходимости разворачиваю прямо в коде дабы выкинуть лишнее буде тому потреба. Да и на гитхабе пару раз был...

Спасибо, Клапа! нормальные велики.

kolyn
Offline
Зарегистрирован: 18.01.2019

Пользую велик 1.0 совместно с кодом Dimax http://arduino.ru/forum/apparatnye-voprosy/ispolzuem-enkoder?page=5#comment-449417  для энкодера .

Едет хорошо, только руль под себя слегка подогнул;)

Diminator
Offline
Зарегистрирован: 15.09.2015

Пытаюсь к библиотеке прикрутить MCP23017 но знаний не хватает, как правильно работать с параметрами между классами?

main.cpp
#include "Adafruit_MCP23017.h"
#include "I2CScanner.h"
#include "Button_v1.h"

Adafruit_MCP23017 mcp;

BUTTON BUTTON_01(0); // объявляем объект класса BUTTON кнопку с именем BUTTON_01, подключенную к пину 0 MCP23017.

void setup() {
  Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY);
  Serial.println();
  
  mcp.begin();      // use default address 0
 
  Serial.println();
}

void loop() {
 
BUTTON_01.read(); // обновляем состояние переменных кнопки BUTTON_01.

// работаем с переменными кнопки BUTTON_01.
if (BUTTON_01.click_down) {
  Serial.println("key 01 click DOWN");
  }
if (BUTTON_01.click_up) {
  Serial.println("key 01 click UP");
  }
if (BUTTON_01.doubleclick) {
  Serial.println("key 01 click down");
  }
if (BUTTON_01.timer) {
  Serial.println("key 01 timer");
}
if (BUTTON_01.retention) {
  Serial.println("key 01 retention");
}

delay(2000);

}

Пытался обратиться к классу MCP ошибка что mcp не задекларирован. 

button_v1.h

#include "Adafruit_MCP23017.h"

BUTTON(byte pb) {
_pb = pb;
mcp.pinMode(_pb, INPUT);
mcp.digitalWrite(_pb, 1);

Пытаюсь объявить в классе button еще один класс Adafruit_MCP23017 *_mcp; после компиляции esp уходит к эксепшен и ребут.

Знаю что нуб, подскажите как правильно сделать?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Сдается мне, что напрямую не получится никак. Считывать состояние кнопок на расширителе нужно не силами библиотеки, а своими силами, потому что на "одном пине" может располагаться до 16 кнопок. Как вы предполагаете их различать из велосипеда? А есть ли на этом велосипеде возможность создания кнопки без привязки к пину и обработки ее состояний, я не знаю.

ЗЫ: только недавно тут поднимался этот вопрос, я даже внес кое-какие изменения в свою библиотеку

Diminator
Offline
Зарегистрирован: 15.09.2015

v258 пишет:

ЗЫ: только недавно тут поднимался этот вопрос, я даже внес кое-какие изменения в свою библиотеку

Спасибо. Идея с виртуальными кнопками действительно интересная! Попробую.

Duet
Offline
Зарегистрирован: 17.01.2015

Не пойму как подключиться к этой схеме кнопок. Есть хорошая качественная панелька с кнопками, хочу ее приладить на станок на панель управления под Mach3, LPT на ардуину,а на ардуине панелька с кнопками. Снял схему с панельки кнопок, не могу сообразить как по этой схеме ее использовать.

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

Матрица 2х8. Активизировал 11 - смотришь с 3 по 10, затем 12 - и аналогично.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Только про защитные диоды на 11 и 12 не забывай, иначе одновременное нажатие двух кнопок из соседних рядов спалит пины

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

12 кнопок - 1 вход Ардуино.  Есть и на 16 кнопок.

16-ти кнопочные мне пока не пригождались, а три штуки 3х4 успешно трудяца на своих местах.  Единственное что, если нужно ловить одновременное нажатие двух и более кнопок - тогда это решение не годица. 

Duet
Offline
Зарегистрирован: 17.01.2015

Не совсем понял про подключение. По такой схеме 2х8 получается нельзя использовать одновременное нажатие нескольких клавишь?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Можно. Но без диодов защиты это чревато коротким замыканием между пинами

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

Можно без диодов. Активный низким, неактивный переводим на вход с подтяжкой.