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

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

hijin пишет:

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

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

hijin
Offline
Зарегистрирован: 20.08.2017

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

hijin пишет:

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

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

Я тоже иногда не понимаю языка Украинских Гуцулов но отношусь к ним по человечески.

А Вы общаетесь сосвоими собратьями по форуму как мажор с высока

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

hijin пишет:

А Вы общаетесь сосвоими собратьями по форуму как мажор с высока

угнетаю мышебратьев. ок.

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

аргументы функции - ссылки. вот оно чё, Михалыч...

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

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

так не работает:


byte ledPin         =  13;
byte previousMillis =   0;
byte interval       = 250;

void setup() {pinMode(ledPin, OUTPUT);}

void loop() {
byte currentMillis = millis();
if(currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
digitalWrite(ledPin, !digitalRead(ledPin));
}
}

так работает, но это сцуко грёбаный костыль:


byte ledPin         =  13;
byte previousMillis =   0;
byte interval       = 248; // должно быть кратно 8-ми UPD: вроде не обязательно.

void setup() {pinMode(ledPin, OUTPUT);}

void loop() {
byte currentMillis = millis();
if(byte(currentMillis - previousMillis) >= interval) { // должно быть byte(a - b)
previousMillis = currentMillis;
digitalWrite(ledPin, !digitalRead(ledPin));
}
}

у кого какие мысли - как из unsigned long корректно сделать byte?

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

and 0xFF

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

DetSimen пишет:

and 0xFF

пробовал я уже и millis()&0xFF и millis()&0x000000FF - пока не сделаешь byte(currentMillis - previousMillis), пример не работает. и тогда работает с любым способом переделанным в byte millis().

вот и вопрос: почему получается отрицательный (currentMillis - previousMillis) если обе переменные имеют тип byte?

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

правильней, наерн, в word преобразовывать, byte переполняется быстро (за 255 мс).  Не?

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

DetSimen пишет:

правильней, наерн, в word преобразовывать, byte переполняется быстро (за 255 мс).  Не?

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

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

в С int это сакральный тип, компилятор пытается к нему привести целочисленные выражения, поэтому тут нужно явное приведение типов, типа 

byte now = byte(millis());  

и тогда с разностью проблем не будет.  Я думаю. 

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

DetSimen пишет:

в С int это сакральный тип, компилятор пытается к нему привести целочисленные выражения, поэтому тут нужно явное приведение типов, типа 

byte now = byte(millis());  

и тогда с разностью проблем не будет.  Я думаю. 

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

кстати,: byte now = (любой тип)millis(); делает тоже самое.

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

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

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

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

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

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

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

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

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

«Filter out pulses shorter then 5 clockcycles»

О_О

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

Поэтому мой код делает следующее: Если кнопка нажата, срабатывает if, потом происходит задержка 200мс, за это время дребезг пропал и остался чистый сигнал. (с)labviewportal.ru

О_О обнять и плакать...

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017
#define FALSE  0
#define TRUE  (!FALSE)

О_О

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

у кого есть идеи, как сгенерить random(a, b) меньше 50% и больше 33.33% нулей или единиц?

50% - очевидно: boolean(random(0, 2));

33.33% - не очевидно, но можно напрячь мосг и... очевидно: boolean(random(0, 3));

а, что бы вписать в random(a, b), что бы покрыть диапазон 33.33% - 50% ?

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017
		// Запоминаем старое состояние
		old_value = new_value;

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

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

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

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

спасибо.


void setup() {Serial.begin(115200);}

void loop() {
unsigned long start = millis();
/*здесь код вашего скетча*/
unsigned long stop  = millis();
Serial.print(stop - start);
}

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017
 
титановый велосипед для кнопки. (версия 11.0)
 
- добавил выбор типа контактов кнопки(нормально разомкнуты, нормально замкнуты)
- добавил короткие, длинные нажатия
- спрятал уродливое *.button[].*, *.matrix[][].*
- внутри чуть оптимизации и удобочитаемости кода
 
auct
Offline
Зарегистрирован: 14.12.2014

Объясните пожалуйста, как запрограммировать нажатие нормальнозамкнутой кнопки?

Но есть еще 2 нормально открытые кнопки. Они не будут конфликтовать?

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

Клапа, скорее всего, в каком-нить Египте щас попу греет.  Отпуск у радиомонтажников длинный, так что жди терпеливо. 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

auct пишет:

Объясните пожалуйста, как запрограммировать нажатие нормальнозамкнутой кнопки?

Но есть еще 2 нормально открытые кнопки. Они не будут конфликтовать?

не поверите - аналогично нормально разомкнутой - только вместо ==0 ставим !=0 или наоборот в зависимости к чему кнопка притянута

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

auct пишет:

Объясните пожалуйста, как запрограммировать нажатие нормальнозамкнутой кнопки?

вот так.


/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
titanium bicycle for button. (version 11.0)
file Button.h - shell for to class Click, buttons.
https://klapautsiy.github.io/titanium-bicycle-for-button/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/

#include <Button.h>

Button button_Normal_Open;
Button button_Normal_Closed;

void setup() {
button_Normal_Open.NO(); // N.O. Normal Open
// button_Normal_Open.NC(); // N.C. Normal Closed
button_Normal_Open.pullUp();
// button_Normal_Open.pullDn();
button_Normal_Open.duration_bounce       (  50);
button_Normal_Open.duration_click_Db     ( 250);
button_Normal_Open.duration_inactivity_Up(5000);
button_Normal_Open.duration_inactivity_Dn(1000);
button_Normal_Open.duration_press        ( 500);
button_Normal_Open.button( 5, 4, 9, 7, 8); // arduino pins connected to button
// button_Normal_Open.button();

/////
// button_Normal_Closed.NO(); // N.O. Normal Open
button_Normal_Closed.NC(); // N.C. Normal Closed
button_Normal_Closed.pullUp();
// button_Normal_Closed.pullDn();
button_Normal_Closed.duration_bounce       (  50);
button_Normal_Closed.duration_click_Db     ( 250);
button_Normal_Closed.duration_inactivity_Up(5000);
button_Normal_Closed.duration_inactivity_Dn(1000);
button_Normal_Closed.duration_press        ( 500);
button_Normal_Closed.button( 9, 10, 11, 12, 13); // arduino pins connected to button
// button_Normal_Closed.button();

}

void loop() {
button_Normal_Open.read();
if (button_Normal_Open.state_button       (0) == 1) {}
if (button_Normal_Open.state_inactivity_Up(0) == 1) {}
if (button_Normal_Open.state_inactivity_Dn(0) == 1) {}
if (button_Normal_Open.event_click_Up     (0) == 1) {}
if (button_Normal_Open.event_click_Dn     (0) == 1) {}
if (button_Normal_Open.event_click_Db     (0) == 1) {}
if (button_Normal_Open.event_inactivity_Up(0) == 1) {}
if (button_Normal_Open.event_inactivity_Dn(0) == 1) {}
if (button_Normal_Open.event_press_short  (0) == 1) {}
if (button_Normal_Open.event_press_long   (0) == 1) {}
//  button_Normal_Open....................(*) == 1) {}
if (button_Normal_Open.state_button       (4) == 1) {}
if (button_Normal_Open.state_inactivity_Up(4) == 1) {}
if (button_Normal_Open.state_inactivity_Dn(4) == 1) {}
if (button_Normal_Open.event_click_Up     (4) == 1) {}
if (button_Normal_Open.event_click_Dn     (4) == 1) {}
if (button_Normal_Open.event_click_Db     (4) == 1) {}
if (button_Normal_Open.event_inactivity_Up(4) == 1) {}
if (button_Normal_Open.event_inactivity_Dn(4) == 1) {}
if (button_Normal_Open.event_press_short  (4) == 1) {}
if (button_Normal_Open.event_press_long   (4) == 1) {}

button_Normal_Closed.read();
if (button_Normal_Closed.state_button       (0) == 1) {}
if (button_Normal_Closed.state_inactivity_Up(0) == 1) {}
if (button_Normal_Closed.state_inactivity_Dn(0) == 1) {}
if (button_Normal_Closed.event_click_Up     (0) == 1) {}
if (button_Normal_Closed.event_click_Dn     (0) == 1) {}
if (button_Normal_Closed.event_click_Db     (0) == 1) {}
if (button_Normal_Closed.event_inactivity_Up(0) == 1) {}
if (button_Normal_Closed.event_inactivity_Dn(0) == 1) {}
if (button_Normal_Closed.event_press_short  (0) == 1) {}
if (button_Normal_Closed.event_press_long   (0) == 1) {}
//  button_Normal_Open....................(*) == 1) {}
if (button_Normal_Closed.state_button       (4) == 1) {}
if (button_Normal_Closed.state_inactivity_Up(4) == 1) {}
if (button_Normal_Closed.state_inactivity_Dn(4) == 1) {}
if (button_Normal_Closed.event_click_Up     (4) == 1) {}
if (button_Normal_Closed.event_click_Dn     (4) == 1) {}
if (button_Normal_Closed.event_click_Db     (4) == 1) {}
if (button_Normal_Closed.event_inactivity_Up(4) == 1) {}
if (button_Normal_Closed.event_inactivity_Dn(4) == 1) {}
if (button_Normal_Closed.event_press_short  (4) == 1) {}
if (button_Normal_Closed.event_press_long   (4) == 1) {}
}

т.е. - если желаешь рулить настройками пакета кнопок, то объявляешь для этого пакета экземпляр класса и соответсвующим образом ега настраиваешь. настройки распространяются на все кнопки, которые ты указал в настройках // arduino pins connected to button

так, для твоего сабжа:

Button button_Normal_Open;
Button button_Normal_Closed;

button_Normal_Open.NO(); // N.O. Normal Open
button_Normal_Closed.NC(); // N.C. Normal Closed

button_Normal_Open.button( 5, 4, 9, 7, 8); // arduino pins connected to button
button_Normal_Closed.button( 9, 10, 11, 12, 13); // arduino pins connected to button

auct пишет:

Но есть еще 2 нормально открытые кнопки. Они не будут конфликтовать?

для того и написана библиотека, что бы такого не происходило.

*да. для матрицы кнопок - аналогично.

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

andycat пишет:

не поверите - аналогично нормально разомкнутой - только вместо ==0 ставим !=0 или наоборот в зависимости к чему кнопка притянута

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

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

DetSimen пишет:

Клапа, скорее всего, в каком-нить Египте щас попу греет.

на ягелевых плантациях солнечной Тувы.

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

Клапа!!!!  Как я рад тебя видеть.  Пойду тяпну за твоя здоровью, а то переживал сильно.

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

DetSimen пишет:

Клапа!!!!  Как я рад тебя видеть.  Пойду тяпну за твоя здоровью, а то переживал сильно.

Аллаху Акбар иже еси...

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

auct пишет:

Объясните пожалуйста, как запрограммировать нажатие нормальнозамкнутой кнопки?

Но есть еще 2 нормально открытые кнопки. Они не будут конфликтовать?

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

будем считать, что этого всего не было...

просто, тупо взять и проверить самостоятельно, будут конфликтовать или нет - кто запретил? Я!? ¯\_(ツ)_/¯

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

кстати, не заметил сразу вот это

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

заранее поясню своё недоумение именно цифрой "5" - почему не "3" или "7" ? О_О

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

с возвращением!!!

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

Клапа, ты там это... В живых людей кактелями не кидайся.  Лучше титановый лисапед пили. 

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

сайтик библиотеки "титановый велосипед для кнопки" находится здесь: https://klapautsiy.github.io

вопросы и хотелки писать сюда: https://github.com/Klapautsiy/titanium-bicycle-for-button/issues/new

всем спасибо - тема закрыта.

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

RoN пишет:

Клапауций 232, хотел спросить. У вас очень крутой код:)

[внимательно смотрит на изюминку в бочке дерьма мнений о сабже]

RoN пишет:

Можно ли подключить тактовую кнопку на аналоговый вход?

"да", если контроллер твоей дуино позволяет конфигурировать аналоговые входы как цифровые.(на некоторых платах пара аналоговых пинов не конфигурируется как цифровые)

подробно здесь Аналоговые входы

RoN пишет:

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

Заранее спасибо!


if (test.state_button       () == 1) {
// код выполняется неограниченное количество раз пока кнопка нажата
}

if (test.event_click_Dn     () == 1) {
// код выполняется один раз при нажатии кнопки
}

 

RoN
Offline
Зарегистрирован: 28.12.2017

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

"да", если контроллер твоей дуино позволяет конфигурировать аналоговые входы как цифровые.(на некоторых платах пара аналоговых пинов не конфигурируется как цифровые)

подробно здесь Аналоговые входы

Я понял, спасибо. Повезло мне, что atmega328. Сейчас буду пробовать :)

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

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

if (test.state_button       () == 1) {
// код выполняется неограниченное количество раз пока кнопка нажата
}

if (test.event_click_Dn     () == 1) {
// код выполняется один раз при нажатии кнопки
}

PS: Прошу простить мне мою неграмотность, я только учусь

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

RoN пишет:

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

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

в описании алгоритма избегать формулировок, допускающих неоднозначную трактовку.

RoN
Offline
Зарегистрирован: 28.12.2017

В идеале планируется две кнопки (1 - вкл/выкл основного прибора, 2 - переключение минут от 1 до 9 на старшем разряде), двухразрядный семисегментник (либо 2 семисегментника) - старший разряд будет означать минуты, второй всегда 0.

а использование аналоговых необходимо посколько цифровы пины закончились(

вот так распределил пины Arduino Uno на базе ATMega328(dip-корпус): сегменты A,B,C,D,E,F,G,H (D0-D6), V+ для старшего разряда (D7), V- для младшего разряда (D8), плюс пьезопищалка (бузер), два светодиода (RGB), две кнопки.

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

к сожалению не знаю как сделать ссылку такой

[/quote]

ответил здесь #594

[/quote]

поэтому выложу адресс, пост №19 (insert)

http://arduino.ru/forum/programmirovanie/kak-zastavit-rabotat-rele-cherez-millis#comment-334487

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

вторая и последняя попытка:

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

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

в описании алгоритма избегать формулировок, допускающих неоднозначную трактовку.

а, не сочинение на тему "как я планирую провести лето".

RoN
Offline
Зарегистрирован: 28.12.2017

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

вторая и последняя попытка:

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

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

в описании алгоритма избегать формулировок, допускающих неоднозначную трактовку.

Алгоритм: https://yadi.sk/d/GYsS44Zo3RUwjp

P.S. прошу строго не судить, поскольку я не программист и особо точного понятия как это делается не имею

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

RoN пишет:

Алгоритм: https://yadi.sk/d/GYsS44Zo3RUwjp

ок. ты выиграл бесплатную пешеходную прогулку в Сургут.

RoN
Offline
Зарегистрирован: 28.12.2017

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

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

RoN пишет:

Алгоритм: https://yadi.sk/d/GYsS44Zo3RUwjp

ок. ты выиграл бесплатную пешеходную прогулку в Сургут.

 И да я  вас не понял сейчас, что не так я сделал?

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

RoN пишет:

но нельзя же всех под одну гребенку

предлагаешь мне строить фильтрационные лагеря?
что делать с отбраковкой?
отправлять на урановые рудники?
 
неужели, моё предложение, идти на Север, для тебя черезчур гуманно?
RoN
Offline
Зарегистрирован: 28.12.2017

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

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

Я не предлагаю что-то строить. И тем более распределять людей по вашему желанию в лагеря.

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

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

RoN пишет:

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

ты меня прям озадачил - что я без вас буду делать?
 
*кстати, ты почему ещё здесь? - на Север. О_О
RoN
Offline
Зарегистрирован: 28.12.2017

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

*кстати, ты почему ещё здесь? - на Север. О_О

А чего вдруг на север-то сразу? Может вам самим на те "курорты" съездить?

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

RoN пишет:

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

*кстати, ты почему ещё здесь? - на Север. О_О

А чего вдруг на север-то сразу? Может вам самим на те "курорты" съездить?

Он только оттуда ))

RoN
Offline
Зарегистрирован: 28.12.2017

mobistrike пишет:

Он только оттуда ))

Видать ему там понравилось)

Как насчет того чтобы по теме поговорить?

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

*кстати, ты почему ещё здесь? - на Север. О_О

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

RoN пишет:

Как насчет того чтобы по теме поговорить?

кто-то из читатателй этой темы в курсе, шо оно от меня хочет?