пробовал я уже и millis()&0xFF и millis()&0x000000FF - пока не сделаешь byte(currentMillis - previousMillis), пример не работает. и тогда работает с любым способом переделанным в byte millis().
вот и вопрос: почему получается отрицательный (currentMillis - previousMillis) если обе переменные имеют тип byte?
Поэтому мой код делает следующее: Если кнопка нажата, срабатывает if, потом происходит задержка 200мс, за это время дребезг пропал и остался чистый сигнал. (с)labviewportal.ru
Объясните пожалуйста, как запрограммировать нажатие нормальнозамкнутой кнопки?
вот так.
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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 нормально открытые кнопки. Они не будут конфликтовать?
для того и написана библиотека, что бы такого не происходило.
не поверите - аналогично нормально разомкнутой - только вместо ==0 ставим !=0 или наоборот в зависимости к чему кнопка притянута
что бы не сломать себе мосг, пытаясь интерпретировать состояния/события для нормально разомкнутых и замкнутых кнопок, в библиотеке есть соответсвующая настройка и на выходе нам пофиг тип контактов - достаточно указать его в настройках.
Клапауций 232, хотел спросить. У вас очень крутой код:)
[внимательно смотрит на изюминку в бочке дерьма мнений о сабже]
RoN пишет:
Можно ли подключить тактовую кнопку на аналоговый вход?
"да", если контроллер твоей дуино позволяет конфигурировать аналоговые входы как цифровые.(на некоторых платах пара аналоговых пинов не конфигурируется как цифровые)
Вопрос по вашему коду. Подскажите пожалуйста, на какие строки мне необходимо обратить внимаение чтобы выполнение/завершение программного кода выполнялось по нажатию тактовой кнопки?
Заранее спасибо!
if (test.state_button () == 1) {
// код выполняется неограниченное количество раз пока кнопка нажата
}
if (test.event_click_Dn () == 1) {
// код выполняется один раз при нажатии кнопки
}
"да", если контроллер твоей дуино позволяет конфигурировать аналоговые входы как цифровые.(на некоторых платах пара аналоговых пинов не конфигурируется как цифровые)
Я понял, спасибо. Повезло мне, что atmega328. Сейчас буду пробовать :)
Если в коде внизу приведено два примера реализации, значит, как я понял, мне не потребуется переменная типа boolean, поскольку планируется нажать данную кнопку лишь однажды. В случае если мне будет необходимо остановить код при повторном нажатии придется использовать boolean, правильно?
Клапауций 089 пишет:
if (test.state_button () == 1) {
// код выполняется неограниченное количество раз пока кнопка нажата
}
if (test.event_click_Dn () == 1) {
// код выполняется один раз при нажатии кнопки
}
PS: Прошу простить мне мою неграмотность, я только учусь
Если в коде внизу приведено два примера реализации, значит, как я понял, мне не потребуется переменная типа boolean, поскольку планируется нажать данную кнопку лишь однажды. В случае если мне будет необходимо остановить код при повторном нажатии придется использовать boolean, правильно?
тебе нужно опубликовать алгоритм твоей хотелки, что бы я понял, что тебе нужно и смог тебе помочь.
в описании алгоритма избегать формулировок, допускающих неоднозначную трактовку.
В идеале планируется две кнопки (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 и т.д.
неужели, моё предложение, идти на Север, для тебя черезчур гуманно?
Я не предлагаю что-то строить. И тем более распределять людей по вашему желанию в лагеря.
Если вы будете всех кто пытается что-то сделать или в чем-то разобраться отправлять по лагерям, вместо того чтобы сказать как надо или хотя бы что необходимо посмотреть что узнать это, то я думаю за один вечер все школьники уйдут на север, а на второй день студенты. Не уж то все что вы когда либо делали получалось сразу так как вы хотели? С первого раза?
Клапуций, вот вам не понять имея титановый велосипед за ценой подержаного жигуля тех кто ездит на дачу в забитой электричке и просит старую лошадку
иногда мне даже не понять мокшанского наречия русского языка аборигенов Суберии...
Клапуций, вот вам не понять имея титановый велосипед за ценой подержаного жигуля тех кто ездит на дачу в забитой электричке и просит старую лошадку
иногда мне даже не понять мокшанского наречия русского языка аборигенов Суберии...
Я тоже иногда не понимаю языка Украинских Гуцулов но отношусь к ним по человечески.
А Вы общаетесь сосвоими собратьями по форуму как мажор с высока
А Вы общаетесь сосвоими собратьями по форуму как мажор с высока
угнетаю мышебратьев. ок.
klapautsiy.github.io
аргументы функции - ссылки. вот оно чё, Михалыч...
сломал пример безделайного блинка - не хочет он у меня работать на однобайтном времени.
так не работает:
так работает, но это сцуко грёбаный костыль:
у кого какие мысли - как из unsigned long корректно сделать byte?
and 0xFF
and 0xFF
пробовал я уже и millis()&0xFF и millis()&0x000000FF - пока не сделаешь byte(currentMillis - previousMillis), пример не работает. и тогда работает с любым способом переделанным в byte millis().
вот и вопрос: почему получается отрицательный (currentMillis - previousMillis) если обе переменные имеют тип byte?
правильней, наерн, в word преобразовывать, byte переполняется быстро (за 255 мс). Не?
правильней, наерн, в word преобразовывать, byte переполняется быстро (за 255 мс). Не?
для фильтра дребезга достаточен диапазон 0 - 255 миллисекунд, поэтому нет смысла хранить в оперативке более одного байта.
в С int это сакральный тип, компилятор пытается к нему привести целочисленные выражения, поэтому тут нужно явное приведение типов, типа
byte now = byte(millis());
и тогда с разностью проблем не будет. Я думаю.
в С int это сакральный тип, компилятор пытается к нему привести целочисленные выражения, поэтому тут нужно явное приведение типов, типа
byte now = byte(millis());
и тогда с разностью проблем не будет. Я думаю.
это какой-то АдЪ - получается, нужно ходить следом за компиллятором и носом ега тыкать, что бы он байты в инты не переводил...
кстати,: byte now = (любой тип)millis(); делает тоже самое.
может даже и так быть. у переменной явно указывается тип, в него и пхается и делаеца обрезание.
исправил взвод таймера неактивности при изменении аппаратного состояния кнопки.
https://github.com/Klapautsiy/titanium-bicycle-for-button/releases
внезапно обнаружил режим 1KRO клавиатуры у старого кнопочного проводного телефона.
бывают случаи, когда нужно нажатие не более одной кнопки одновременно, а не максимально возможное.
«Filter out pulses shorter then 5 clockcycles»
О_О
Поэтому мой код делает следующее: Если кнопка нажата, срабатывает if, потом происходит задержка 200мс, за это время дребезг пропал и остался чистый сигнал. (с)labviewportal.ru
О_О обнять и плакать...
О_О
у кого есть идеи, как сгенерить random(a, b) меньше 50% и больше 33.33% нулей или единиц?
50% - очевидно: boolean(random(0, 2));
33.33% - не очевидно, но можно напрячь мосг и... очевидно: boolean(random(0, 3));
а, что бы вписать в random(a, b), что бы покрыть диапазон 33.33% - 50% ?
та, да - нужно быстро записать старое в чорный блокнотик, пока не затёрли новым
кому не влом и самому интересно - замерьте время лупа ваших программ и отпишитесь всюда в формате: программа делает это, время столько-то.
для новой версии велосипеда нужно сориентироваться с какой частотой у народа, а не у сферического коня будет происходить опрос кнопок.
спасибо.
Объясните пожалуйста, как запрограммировать нажатие нормальнозамкнутой кнопки?
Но есть еще 2 нормально открытые кнопки. Они не будут конфликтовать?
Клапа, скорее всего, в каком-нить Египте щас попу греет. Отпуск у радиомонтажников длинный, так что жди терпеливо.
Объясните пожалуйста, как запрограммировать нажатие нормальнозамкнутой кнопки?
Но есть еще 2 нормально открытые кнопки. Они не будут конфликтовать?
не поверите - аналогично нормально разомкнутой - только вместо ==0 ставим !=0 или наоборот в зависимости к чему кнопка притянута
Объясните пожалуйста, как запрограммировать нажатие нормальнозамкнутой кнопки?
вот так.
т.е. - если желаешь рулить настройками пакета кнопок, то объявляешь для этого пакета экземпляр класса и соответсвующим образом ега настраиваешь. настройки распространяются на все кнопки, которые ты указал в настройках // arduino pins connected to button
так, для твоего сабжа:
Но есть еще 2 нормально открытые кнопки. Они не будут конфликтовать?
для того и написана библиотека, что бы такого не происходило.
*да. для матрицы кнопок - аналогично.
не поверите - аналогично нормально разомкнутой - только вместо ==0 ставим !=0 или наоборот в зависимости к чему кнопка притянута
что бы не сломать себе мосг, пытаясь интерпретировать состояния/события для нормально разомкнутых и замкнутых кнопок, в библиотеке есть соответсвующая настройка и на выходе нам пофиг тип контактов - достаточно указать его в настройках.
Клапа, скорее всего, в каком-нить Египте щас попу греет.
на ягелевых плантациях солнечной Тувы.
Клапа!!!! Как я рад тебя видеть. Пойду тяпну за твоя здоровью, а то переживал сильно.
Клапа!!!! Как я рад тебя видеть. Пойду тяпну за твоя здоровью, а то переживал сильно.
Аллаху Акбар иже еси...
Объясните пожалуйста, как запрограммировать нажатие нормальнозамкнутой кнопки?
Но есть еще 2 нормально открытые кнопки. Они не будут конфликтовать?
забудем, что выше ответил по существу, что в комплекте с библиотекой идут примеры и файл описалова, сцуко, аж на двух языках - человеческой и русском.
будем считать, что этого всего не было...
просто, тупо взять и проверить самостоятельно, будут конфликтовать или нет - кто запретил? Я!? ¯\_(ツ)_/¯
кстати, не заметил сразу вот это
прошу выйти этого умного анонима на связь и объяснить, чем я так оскорбил ега чувства?
заранее поясню своё недоумение именно цифрой "5" - почему не "3" или "7" ? О_О
с возвращением!!!
Клапа, ты там это... В живых людей кактелями не кидайся. Лучше титановый лисапед пили.
сайтик библиотеки "титановый велосипед для кнопки" находится здесь: https://klapautsiy.github.io
вопросы и хотелки писать сюда: https://github.com/Klapautsiy/titanium-bicycle-for-button/issues/new
всем спасибо - тема закрыта.
Клапауций 232, хотел спросить. У вас очень крутой код:)
[внимательно смотрит на изюминку в бочке дерьма мнений о сабже]
Можно ли подключить тактовую кнопку на аналоговый вход?
"да", если контроллер твоей дуино позволяет конфигурировать аналоговые входы как цифровые.(на некоторых платах пара аналоговых пинов не конфигурируется как цифровые)
подробно здесь Аналоговые входы
Вопрос по вашему коду. Подскажите пожалуйста, на какие строки мне необходимо обратить внимаение чтобы выполнение/завершение программного кода выполнялось по нажатию тактовой кнопки?
Заранее спасибо!
"да", если контроллер твоей дуино позволяет конфигурировать аналоговые входы как цифровые.(на некоторых платах пара аналоговых пинов не конфигурируется как цифровые)
подробно здесь Аналоговые входы
Я понял, спасибо. Повезло мне, что atmega328. Сейчас буду пробовать :)
Если в коде внизу приведено два примера реализации, значит, как я понял, мне не потребуется переменная типа boolean, поскольку планируется нажать данную кнопку лишь однажды. В случае если мне будет необходимо остановить код при повторном нажатии придется использовать boolean, правильно?
PS: Прошу простить мне мою неграмотность, я только учусь
Если в коде внизу приведено два примера реализации, значит, как я понял, мне не потребуется переменная типа boolean, поскольку планируется нажать данную кнопку лишь однажды. В случае если мне будет необходимо остановить код при повторном нажатии придется использовать boolean, правильно?
тебе нужно опубликовать алгоритм твоей хотелки, что бы я понял, что тебе нужно и смог тебе помочь.
в описании алгоритма избегать формулировок, допускающих неоднозначную трактовку.
В идеале планируется две кнопки (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
вторая и последняя попытка:
тебе нужно опубликовать алгоритм твоей хотелки, что бы я понял, что тебе нужно и смог тебе помочь.
в описании алгоритма избегать формулировок, допускающих неоднозначную трактовку.
а, не сочинение на тему "как я планирую провести лето".
вторая и последняя попытка:
тебе нужно опубликовать алгоритм твоей хотелки, что бы я понял, что тебе нужно и смог тебе помочь.
в описании алгоритма избегать формулировок, допускающих неоднозначную трактовку.
Алгоритм: https://yadi.sk/d/GYsS44Zo3RUwjp
P.S. прошу строго не судить, поскольку я не программист и особо точного понятия как это делается не имею
Алгоритм: https://yadi.sk/d/GYsS44Zo3RUwjp
ок. ты выиграл бесплатную пешеходную прогулку в Сургут.
Я понимаю что вы хороший программист, но нельзя же всех под одну гребенку, не все хорошо знают даже азы, не говоря уж о серьезных вещах.
Алгоритм: https://yadi.sk/d/GYsS44Zo3RUwjp
ок. ты выиграл бесплатную пешеходную прогулку в Сургут.
И да я вас не понял сейчас, что не так я сделал?
но нельзя же всех под одну гребенку
Я не предлагаю что-то строить. И тем более распределять людей по вашему желанию в лагеря.
Если вы будете всех кто пытается что-то сделать или в чем-то разобраться отправлять по лагерям, вместо того чтобы сказать как надо или хотя бы что необходимо посмотреть что узнать это, то я думаю за один вечер все школьники уйдут на север, а на второй день студенты. Не уж то все что вы когда либо делали получалось сразу так как вы хотели? С первого раза?
А чего вдруг на север-то сразу? Может вам самим на те "курорты" съездить?
А чего вдруг на север-то сразу? Может вам самим на те "курорты" съездить?
Он только оттуда ))
Он только оттуда ))
Видать ему там понравилось)
Как насчет того чтобы по теме поговорить?
Как насчет того чтобы по теме поговорить?
кто-то из читатателй этой темы в курсе, шо оно от меня хочет?