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

saftik
Offline
Зарегистрирован: 08.04.2015

вопрос к ТС а как бы еще к вашему "классу" приделать счетчик нажатий.  

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

saftik пишет:

вопрос к ТС а как бы еще к вашему "классу" приделать счетчик нажатий.  

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

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

saftik
Offline
Зарегистрирован: 08.04.2015

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

saftik пишет:

вопрос к ТС а как бы еще к вашему "классу" приделать счетчик нажатий.  

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

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

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

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

так вот дошел до момента сброса программы в исходное состояние. 
думаю чтоб зброс осуществлялся так. 
1) если была сработка 
2) закрываем наружнюю дверь door_out
3) 5 раз открываем закрываем  внутреннюю дверь door_in 
if (couter == 5) програма возвращаеться к нормальному режиму
вот тут то мне и нужен счетчик

saftik
Offline
Зарегистрирован: 08.04.2015

Хотя да, счетчик нужен не в калассе.
нужно считать не все нажатия а только при условиb

if (flag_alarm==true && digatalRead(door_OUT)==LOW)  // если была сработка тревоги и мы закрыли наружнюю дверь

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

saftik пишет:

Хотя да, счетчик нужен не в калассе.

верно - нужные вам счётчики вы можете написать в своём скетче.

например:

if (button[0].event_click_Dn) {counter++;}

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017
рекомендации, если вы желаете получить вменяемый комментарий от Клапауций:
1. использовать оригинальный код класс титановый велосипед для тактовой кнопки.
2. если вам избыточен функционал класс титановый велосипед для тактовой кнопки - достаточно закомментировать этот функционал, но не дописывать свой и не редактировать авторский.
3. автор класс титановый велосипед для тактовой кнопки оставляет за собой право не выносить себе мозг анализом корректности алгоритмов применения кнопок ползателями класс титановый велосипед для тактовой кнопки.
Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

далее...

saftik пишет:

if (flag_alarm==true && digatalRead(door_OUT)==LOW)  // если была сработка тревоги и мы закрыли наружнюю дверь

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

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

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

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

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

del

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

del

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

del

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

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

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

а без диодов можно?

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

jeka_tm пишет:

а без диодов можно?

А заодно и без кнопок

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

ЕвгенийП пишет:

jeka_tm пишет:

а без диодов можно?

А заодно и без кнопок

ну, к чему этот пустой высер?

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

jeka_tm пишет:

а без диодов можно?

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

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

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

а понятно

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

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

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

jeka_tm пишет:

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

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

*не "номер", а "индекс массива пинов".

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

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

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

jeka_tm пишет:

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

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

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

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

jeka_tm пишет:

а без диодов можно?

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

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

!!!это был неверный ответ.

без диодов можно.

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

а что изменилось?

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

jeka_tm пишет:

а что изменилось?

я забыл, что можно переключать pinMode из OUTPUT в INPUT и обратно на лету и не париться с торчащими наружу OUTPUT'ами.

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

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

хорошо

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

del

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

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

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

ну, ок.

текстовый редактор на LCD1602:


#include <LiquidCrystalFast.h>
// LiquidCrystalFast lcd(RS, RW*, E, D4, D5, D6, D7)
   LiquidCrystalFast lcd( 0, 15 , 1, 10, 11, 12, 13);

char char_generator[4][4] = {
                             {'1', '2', '3', 'A'},
                             {'4', '5', '6', 'B'},
                             {'7', '8', '9', 'C'},
                             {'*', '0', '#', 'D'}
                                                 };

#include <Button.h>
#include <Matrix.h>                                                 

Button test0; // кнопка
Matrix test1; // матрица

void setup() {
lcd.begin(16, 2);
lcd.cursor();

test0.button(3);
test1.matrix_x( 4,  5,  6,  7);
test1.matrix_y(16, 17, 18, 19);
}


void loop() {

test0.read();
test1.read();

if (test0.event_click_Dn()) { // удалить символ
lcd.rightToLeft();
lcd.print(' ');
lcd.leftToRight();
lcd.print(' ');
lcd.rightToLeft();
lcd.print(' ');
lcd.leftToRight();
}

if (test1.event_click_Dn() == 1) {
lcd.print(char_generator[test1.KRO1_y][test1.KRO1_x]); // печатать символ
}

}

 

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

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

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

qwone пишет:

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

нормальный такой себе интерфейс - ровный print(char_generator[test1.KRO1_y][test1.KRO1_x]); // печатать символ

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

Нормальный интерфейс для клавиатуры это Serial. Клавиатура нужна для набора строки и совмещаться с другими потоками.

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

qwone пишет:

Нормальный интерфейс для клавиатуры это Serial. Клавиатура нужна для набора строки и совмещаться с другими потоками.

для ввода параметров клавиатура не нужна?

ты видишь здесь #437 сериал?

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

del

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

del

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

Осталось повесить ее на канал I2C c помощью 2-х модулей на которые обычно дисплей вешают.

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

qwone пишет:

Осталось повесить ее на канал I2C c помощью 2-х модулей на которые обычно дисплей вешают.

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

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

Уважаемый Клапауций 112 !

Подскажите пожалуйста :

if (BUTTON_01.retention) {
  a0++;
  }
 if (BUTTON_01.click_up) {     
   a1++;  
  } 

Как сделать чтоб при долгом нажатии не срабатывало короткое нажатие.

Спасибо !

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017
if (BUTTON_01.retention) {a0++;}
// if (BUTTON_01.click_up ) {a1++;}

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

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

Как отделить мух от котлет в коде : короткое нажатие - действие первое, долгое нажатие - действие второе .

У меня при долгом нажатии срабатывают оба действия .

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

mobistrike пишет:

Как отделить мух от котлет в коде : короткое нажатие - действие первое, долгое нажатие - действие второе .

У меня при долгом нажатии срабатывают оба действия .

во-первых - у тебя не короткое и долгое нажатие, а: "отпускание кнопки" и "удержание кнопки".

во-вторых - я тебе уже ответил здесь #397

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

mobistrike пишет:

Как отделить мух от котлет в коде 

Очень просто

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

ЕвгенийП пишет:

mobistrike пишет:

Как отделить мух от котлет в коде 

Очень просто

 

 

Евгений спасибо ! Вы всегда мне помогаете .

Сделал по вашему совету . Использовал библиотеку ClickButton вместо велосипеда . 

 

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Помогло? Ну, тогда я рад!

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

в пень дефайны - настраиваем матрицы и/или кнопки индивидуально и передаём параметры во время опроса.

одна кнопка ест 5 байт оперативки - меньше не будет, кого не устраивает - пилите гирю

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017
matrix                                           matrix_y(*,*,*,*,*,*,*) '*'
                                                          | | | | | | |
        [0][0] [1][0] [2][0] [3][0] [4][0] [5][0] [x][0]--^ | | | | | |
        [0][1] [1][1] [2][1] [3][1] [4][1] [5][1] [x][1]----^ | | | | |
        [0][2] [1][2] [2][2] [3][2] [4][2] [5][2] [x][2]------^ | | | |
        [0][3] [1][3] [2][3] [3][3] [4][3] [5][3] [x][3]--------^ | | |
        [0][4] [1][4] [2][4] [3][4] [4][4] [5][4] [x][4]----------^ | |
        [0][5] [1][5] [2][5] [3][5] [4][5] [5][5] [x][5]------------^ |
        [0][y] [1][y] [2][y] [3][y] [4][y] [5][y] [x][y]--------------^
         |      |      |      |      |      |      |
         | v----^      |      |      |      |      |
         | | v---------^      |      |      |      |
         | | | v--------------^      |      |      |
         | | | | v-------------------^      |      |
         | | | | | v------------------------^      |
         | | | | | | v-----------------------------^
         | | | | | | |
matrix_x(*,*,*,*,*,*,*) '*' - arduino pins connected to columns

duration_bounce       (time) - duration of the debounce filter timer
duration_click_Db     (time) - duration of the double-click timer
duration_inactivity_Up(time) - duration of the inactivity timer of the non-pressed button
duration_inactivity_Dn(time) - duration of the inactivity timer of the pressed button

pullUp()  - pins rows pull to Vcc
pins rows --10KOm---Vcc

pullDn()  - pins rows pull to GND
pins rows --10KOm---GND

TKRO() -  2-Key Rollover
       v--------------v
matrix[x][y]         [x][y]button
          ^--------------^

NKRO() - No Key Rollover
       v--------------v
matrix[x][y]         [x][y]button
          ^---diode------^

init() - variables initialization
read() - read button

 

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

в чём профит разделения файла класса на .h и .cpp ?

где это нужно делать и почему лично мне эта необходимость неявна и бессмысленна?

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

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

в чём профит разделения файла класса на .h и .cpp ?

где это нужно делать и почему лично мне эта необходимость неявна и бессмысленна?

Это очнь сложный вопрос, что лучше. Так же невозможно сказать, что правильнее . Описывать методы класса внутри класса или выводить наружу. Так что я делаю по разному. И еще. Почему-то  все чужие библиотеки описываю под себя и свои задачи. Так что могу сводить библиотеки в единый файл, или разбить на несколько.  Но как бы не было у меня скетч почему-то выходит в нескольких файлах.

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

qwone пишет:

Это очнь сложный вопрос, что лучше. 

нда. объяснил...