Уроки Arduino #6 - отработка нажатия кнопки при помощи флажков
ฝัง
- เผยแพร่เมื่อ 7 เม.ย. 2017
- В этом уроке научимся работать с флажками и сделаем расширенную отработку нажатия кнопки с защитой от дребезга контактов.
▼ Скетчи из урока ▼
alexgyver.ru/arduino/lesson_6_...
▼ OneButton library ▼
github.com/mathertel/OneButton
▼ Огромный стартовый набор GyverKIT ▼
kit.alexgyver.ru/
▼ Уроки Arduino на сайте ▼
alexgyver.ru/lessons/
▼ Модули и датчики с Али ▼
alexgyver.ru/arduino_shop/
▼ Страница "Заметок Ардуинщика" ▼
alexgyver.ru/arduino_lessons/
Теги: #arduino #уроки #ардуино #alexgyver
●●●●●●●●●●●●●●●●●●●●
► Основной канал: / alexgyvershow
► Поддержать автора alexgyver.ru/support_alex/
► Официальный сайт: alexgyver.ru/
► Почта: alex@alexgyver.ru - วิทยาศาสตร์และเทคโนโลยี
Незнание о существовании некоторых библиотек благоприятно влияет на умственное развитие)
Золотые слова!
Со смыслом
Жиза
@@anon3696 САС МЫСЛОМ ПРАВИЛЬНО
Life Good 🤣🤣🤣 извиняюсь
Огромное спасибо автору за работу, очень круто. Лучшие уроки на русском ютубе!
Интересные знания, четкое изложение, лаконичность, понятность и точнось и качество монтажа. Супер. Спасибо.
С каждым уроком становится только интереснее и сам материал разобран практически до мелочи, всё очень доходчиво))
Спасибо автору!!!
Тоже начал осваивать язык ардуино. Спасибо автору за интересные ролики и доступное объяснение! Заметил один нюанс (возможно тут уже кто то об этом писал). Код с millis(); отрабатывает антидребезг только при нажатии на кнопку но не при отпускании (что при отпускамии у меня приводило к ложным срабатываниям). Антидребезг при отпускании устранился дописыванием той же конструкции (- last_press > 50 и last_press = millis();) во второй оператор if.
Лучшие уроки по ардуинке:)
Спасибо! На основе этого урока сделал себе простой сигнализатор наполнения ванны =)
Взял 1 Arduino Nano, 1 спикер от ПК и из кусочка старого текстолита сделал "датчик дождя".
Выяснилось что спикер тихий и взял у жены старую круглую моно-колонку.
Сваял все это дело так, разъем Jack 3.5 землю к земле Arduino, левый и правый канал замкнул на пин D3 (3 pin), далее "датчик дождя" по принципу кнопки, 1 контакт к земле Arduino, 2 к пину A5 (19 pin).
Код из этого урока с не большыми поправками:
#define b 3 //3 pin спикера
if (button1H) {
Serial.println("hold");
tone (b, 500); //Пищание с частотой 500 Hz
delay(100); //Задержка
tone(b, 1000);
delay(100);
button1H = 0;
}
void setTone(int pin, int note, int duration) {
tone(pin, note, duration);
delay(duration);
noTone(pin); //Прекращение пищания
}
Коробку потом из под Тик-Так возьму =)
А вообще с ESP8266 или с RFками можно зацепить к "умному" проекту как "датчик дождя", сырости или наполнения резервуара.
Автор! Твои уроки просто замечательны! все легко и понятно, формат помогает полностью усвоить все что ты говоришь и показываешь! Продолжай в том же духе! Ты красавчик)
Прекрасные уроки. Всё по делу, куча полезного материала в единицу времени, приятный голос и музыкальное сопровождение. Вы талантливый преподаватель.
Спасибо за труд. Подача материала на высоте, благодаря этим урокам, рискнул взяться за освоение Ардуино
Капец! Как же это интересно!
Все доступно, понятно, лаконично - максимум информации за минимум времени. Наглядно и качественно. Подписка, лайки и пожелание всех благ. Не останавливайтесь!!!
Спасибо большое за твои уроки, очень хорошо помогли быстро разобраться во всем и решить поставленную задачу)
Как всегда коротко, но при этом детально разобран вопрос. Спасибо!
Как и в остальных Уроках: четко, последовательно и обстоятельно. Великолепно!
Человек, ты просто молодец!!!! Я пока ничерта в этом не соображаю, но мне ОЧЕНЬ ИНТЕРЕСНО!!!!
Шикарные уроки, ждём продолжения!
Уважаемый автор! Большое вам спасибо за ваши уроки!
Спасибо, что в описании всё оставил!
Очень классно всё объясняешь!! Спасибо!
я вот ожидал шутки "батт-флаг - баттплаг". но я с годами, видимо, стал слишком пошлым :-) а вообще хорошее дело делаешь. я ради интереса смотрю, как второй канал любимого автора, хотя мне, к примеру, учиться тут особо нечему, ибо пишу давно и приходилось на дельфи, сишарпе, разных скриптах пилить код. даже клятые ладдеры копать приходилось :-) а со временем привыкаешь, что синтаксис - дело десятое, главное алгоритм :-) но очень многим без опыта поможет. респект!
спасибо =) А шутка и правда лучше моей
Вот умеет же человек обьяснить, просто и по делу.
Нужно больше видео!!!
сколько книг с темами по запоминанию состояния кнопки прочитал, это видео - самое понятное и эффективное объяснение! Молодчина, Алекс!
Эмммм, мне кажется, что вы слегка преувеличиваете. КНИГ (!) по запоминанию состояния кнопки.
пошел вон
боже, Гайвер спасибо огромное! Только тут нашёл то, что искал 10 часов! СПАСИБО!
Было бы классно твои видосы внедрить в школы на уроки информатики, потому что там сейчас полный агхтунг! Пейнт, Карл, пейнт ещё самый первый((((( Ты не думал об этом?
а кто там препода1ёт информатику? Зп начинающего учителя 12 000 р. Теперь к зарплате начиначиющего учителя добавь зп начинающего программиста хотя бы. В школе не должны учить программированию. Это прирагатива специализированных кафедр в вузах
nyan band Герман совершенно прав. Ардуино вообще было придумано именно для студентов. А если внедрять это на уроках информатики - это уже уклон в одну сторону... или нужно все уроки усложнить до такого уровня... ммм... литература на уровне первых курсов филфака...
в конце 90х в школе было то же самое, примитивные рисовалки в винде, примитивная печать текста в текстовых редакторах, немного электронных таблиц + бейсик. К сожалению многие даже этого не тянули. Ардуино в школе можно рассматривать как дополнительный кружок по интересам робототехники\моделирования
программирование в среде паскаль с 7-9 класс
программированию надо учить начиная с детского сада. Никто ж не заставляет учить С++
Хорошо было бы если ты разобрал в видео функции и команды отдельно ,а уже потом показывал их применение .
Как всегда просто и полезно! С кнопками уже разобрался, но всё равно полезно иметь такую напоминалку =D
Качественно, доходчиво, понятно!!!! КЛАС
как всегда все понятно.
Спасибо за видео. Вы лучший
Все оч. круто!!!!Жду с нетерпение обещанный урок по спящему режиму ардуино.
Спасибо!!! Очень интересное видео!
very well, please keep going in this way :)
Понял все. Спасибо!
if aa_old a^= digitalRead(); Функция XOR; С помощью нее можно взвести и сбросить флаг. Сократив цикл if.
if это не цикл)
Просто ОФИГЕННЫЙ УРОК !!!!!!!!
Как всегда лайк лучшему ардуинщику ютуба!
Но... Есть проблемка... Такой обработчик кнопок отвалится через 49 (49,71026961805556) дней непрерывной работы устройства.
Расковырял библиотеку - та же фигня, переход millis через 0 она не отрабатывает.
Так что если устройство должно работать нонстоп (у меня это контроллер отопления на даче), то придется корчить сволй обработчик.
Вот для примера счетчик секунд, можно и обработчик кнопок аналогично сделать ;) Кстати, пойду сделаю, я сюда именно в расчете на него и залез )
void loop(){
if(!isNewMillis && millis() > nextSec){
newSecond();
}
else if(isNewMillis && millis() < oldSec && millis() > nextSec){
newSecond();
}
}
void newSecond(){
oldSec = nextSec; //задаем значение текущей секунды
nextSec += 1000; //вычисляем следующую секунду
if(nextSec < oldSec){ //проверяем будет ли следующая меньше текущей (таймер обнулился)
isNewMillis = true;
}
else{
isNewMillis = false;
}
}
Молодец. Видео приятно посмотреть, несмотря на то, что ты это всё давно уже знаешь. )
Спасибо за классные видео
Спасибо за видео и советы
Класс,наслаждение от видоса)
Спасибо! Всё супер!
СПАСИБО ЗА УРОК
самое нормальное объяснение, которое я только смог найти, не то что хрень типа debounce прописаная в setup
Так вот чем ардуинщики в воскресенье утром занимаются:)
Это вчера вечером под пивко, а выложено утром :-)
Владимир Белов возможно 😉
Чувак самый что есть крутяк.
УВАЖУХА
Спасибо за уроки, очень все классно. Единственная проблема у меня - качество моих кнопок такое, что время на устранение дребезга близко к времени, когда уже HOLD надо принимать))))
спасибо все понятно.РАБОТАЕТ!!!
Отсылку оценил, спасибо :D
Алекс предлагаю идейку для проекта на ардуинке. Предлагаю сделать сигналку для дома, дачи квартиры. Канала так на четыре для возможности подключить разные датчики дым ,газ ,вода ,движение. Ну и конечно с оповещением на телефон что за лини сработала.
Класс! Спасибо большое!
спасибо за урок
Спасибо за видео. Переработаю свой код кнопки в проекте бортового компьютера для игры ETS2. На языке С не писал до ардуино, так что в новинку некоторые вещи.
А Com-порт использую не только для дебага, но и для двухстороннего обмена ардуино с программой на Perl в проекте, в частности надо отслеживать нажатие кнопки.
Первые два правила интернетов не забывай. Отсылка, конечно, хороша, но названия переменных и флагов в уроке хорошо было-бы использовать разными по звучанию, очень легко запутаться.
Алекс, привет! Покажи пожалуйста туториал по ИК приемнику.
ахахахах Библиотека)))) Я об этом не знал, но инженерное мышление подсказало как регистрировать и нажатие, и удержание, и двойное нажатие без всяких библиотек. Теперь такая гордость из за этого.
Расскажи пожалуйста про это.
Когда кнопка нажата, запускается цикл, который каждые 100 мс добавляет 1 к переменной, потом когда кнопка отпущена, цикл заканчивается. Затем можно задавать параметры для интервала этой переменной. То есть в ней записано сколько времени кнопка была нажата.
Супер!!!
большое спасибо тебе даже мне школьнику всё ясно
Крутой канал все понятно и доступно, уважение !!!!!!!!!!!!!!!!!!!!!!!
так держать, тебя ждет большое успех!!!! Когда следующие видосы ?
+David Poshelyk осенью
Лайк за отсылку к флагштоку =)
Расскажи, пожалуйста, как самому написать библиотеку для ардуино.Думаю, многим будет интересно.
Привет. Ты так классно все разжевываешь! Можешь запилить видео по созданию суточного таймера для включения-выключения света на несколько каналов? Таких видео много, но они какие-то неполные.. Авторы показывают конечный результат, и только...
СПАСИБО! НАКОНЕЦТО КНОПКА ЗАРАБОТАЛА
Спасибо.
Алекс!!! АУ, когда gyvermod!??
Подскажите какую библиотеку или скейч установить для открывания автоматических варот.
Ochen bistro kommentiruesh i pechataesh, dlya novichkov ochen tiazhelo za toboi uspevat. ne vse zhe programmers like you.
Pause
Скажите пожалуйста, как вы саму схему собирали? в дигитал 3 совали плюс, и со стороны дигитал гнд? или как?
привет, а можно на флажках меню собрать? чтобы выполнять действие по очереди, выставля флаг на след действие и снимая с "себя" как уже завершонее, и чтоб не стопорить луп?
Сделай пожалуйста видео про графику.Что-бы ардуино по желанию могла рисовать на экране.
Код в конце видео не спасает от дребезга. Дребезг срабатывает, через указанную millis. Если задержку поставить в секунду, то дребезг и сработает через секунду. Флаг меняется в цикле if, тоесть, сработает после задержки millis. Хорошо только то, что срабатывает повторно, если совпадет условие после дребезга кнопки, а не 5-10 раз как дребезжит кнопка. =)) Надеюсь поняли))) Если попробовать двойной if сделать, в первом меняется логика кнопки, во втором, если задержка меньше - игнорировать, если больше - выполнить код в if. Что-то наподобие вот этого:
if (butt == 1 && butt_flag == 0) {
butt_flag = 1;
if (millis() - last_press > 1000)
{
releOn = !releOn;
digitalWrite(rele1, releOn);
Serial.println("Button pressed");
last_press = millis();
}
else {
Serial.println("drebezggg");
}
}
Но это не точно. У меня этот код вроде работает. У меня всё на реле завязано, поэтому подписано реле ))
В целом код мне нравится, попробовал сделать включение нескольких источников на 4 кнопки, задержку миллис поставил в секунду. Мне нравится, да и эта миллис просто открытие для меня, не то, что этот делей))
Проверку (millis() - last_press>0) надо вставить на отпускание кнопки:
if( !butt && butt_flag && millis() - last_press>0)
в примере возможно неточность, т.к. там проверяется время повторного нажатия, что бессмысленно (нажатие уже зафиксировано в butt_flag ).
Цитата с сайта alexgyver.ru/lessons/arduino-libraries/ "oneButton - библиотека для расширенной работы с кнопкой. На мой взгляд неудобная".
А в видео говорится, что ЗАМЕЧАТЕЛЬНАЯ. За уроки СПАСИБО!!!
*Уроки замечательные!* Все шесть прошел и вот жду следующий выпуск, так интересно стало.
Кстати, что ты думаешь о Fritzing, я имею ввиду писать код, прошивать МК и смотреть в монитор COM-порта, почти все нужное там есть для прошивки, как в Arduino IDE. Или дефолтная IDE лучше?
подскажи Arduino PRO micro прошивать только через специальную плату для прошивки или можно на прямую с компа
Oh, yeees! Touch mu butt harder!
А вообще, крайне рекомендую или полностью писать button, или хотя бы btn - это более широко известное сокращение, чтобы не было таких казусов)
Вместо hold рекомендую события up/down. И в коде программы уже принимать решения как с ними быть. Хоть холд, хоть просто обработка нажатия.
Привет из Люберец :)
ждем новое видео!
Delay - бичёвская команда! )
Delay team...
Смотрю Ваши уроки. Возник вопрос с переключанием светодиода.
Зачем писать состояние светодиода? Его разве нельзя считать через digitalRead? К примеру, когда кнопка нажата выполнять digitalRead пина, к которому подключен светодиод, и если там LOW, то ставить HIGH и наоборот. Или я что-то не так понимаю?
Сделай ещё один урок пожалуйста!!)
Pavel_Light он уехал минимум до августа, поэтому роликов за это время точно не будет.
вот сейчас снова удивил! на кнопке 3 команды!
блин это только кнопу тыкаем )) а что же дальше !
Круто
спасибо теперь надо сообразить как работает гирлянда и попытаться повторить в качестве урока
замутил токую вещь с пьезо пищялкой и о боги работает
sir please explain the checkbox how it works
дребезг можно легко убирать программно.
if(digitalRead(0) == 0){
//делаем что-то
while (digitalRead(0) == 0); // не даем программе выйти пока кнопка держится)
}
спасибо, работает
было бы неплохо начинать названия логических переменных со слова is. например isButtonPressed. повышает читаемость
давненько не видать новых уроков. жду 7 урок.
А когда аппаратура??
Подойдёт как за основу передатчик от квадрика Syma??
ДЛя потенциометров!
Добрый день! Почему в скетче button_press_modes нажатия кнопки всё равно отрабатываются с дребезгом? На однократное нажатие в порт пишется то double, то pressed, то pressed и double вместе,то же самое и при двойном нажатии ...
Класс
Здравствуйте. А где взять этот черновик по отработке нажатий, ссылка под видео не открывается. Спасибо.
у тебя можно многому научиться у тебя всё понятно но к ардуино можно подключать не только датчики но и LCD display 2004А и выводить на них разную информацию . Если будет время то вот одна идея для следующего урока.
Здравствуйте. Помогите пожалуйста правильно написать часть скетча:
Такое условие работает отлично
if(temp < 25)digitalWrite(rele, HIGH);
else digitalWrite(rele, LOW);
но мне нужно включать реле по условию температуры, а выключать кнопкой S1. Но самое важное - условие будет повторяться с другой температурой и нужно включать это же реле, а вот отключить потом реле нужно уже кнопкой S2.
А сколько пинов подтянуты внутренним резистором? Т.е. могу ли я подключить например 5-7 кнопок и все их подтянуть внутренним резистором?
Спасибо за классное видео. А как обрабатывать несколько разных кнопок?
На разные порты подключать кнопки от земли, либо можно помучаться и сделать все кнопки на аналоговый порт(разное напряжение - разный сигнал)
Гдето здесь должна быть шутка про батт-плаг))
подскажите пожалуйста
if (millis() - last_mls2 > 2000) //периодичность публикации
{ val = digitalRead(pirPin); // считываем значение и приравниваем к "Val"
last_mls2 = millis();
client.publish(pir_topic, String(val).c_str()); // публикуем СОСТОЯНИЕ ДАТЧИКА
//
}
публикация состояние датчика раз в 2 секунды... как сделать чтоб публикация была только при изменении состояние датчика . датчик может срабатывать до 6 секунд по времени
а как прописать кнопку к уроку с адресной светолентой, что бы кнопкой переключался режим ленты на следующий, а не вводить вручную с компа?
Алекс, привет!
Хочу предложить тебе крутую идею для нового видео.
В чем суть: прибор на ардуино который будет считать витки, сделанные намоточным станком и выводить их на экран, но при кручении намоточной болванки в одну сторону ардуино будет прибавлять витки, а при кручении в обратную отнимать их.
Я думал об этом и вот, к чему дошёл:
Появилась идея использовать 2 датчика холла таким образом, чтобы при считывании последовательного сигнала сначала с первого датчика, а потом з второго ардуина понимала , что нужно прибавить виток, а если наоборот (сначала с второго а потом с первого), то убавить.
Или как-нибудь механически передавать информацию о стороне кручения болванки на ардуину.
Думаю эта идея тебе понравиться. Отпиши мне что думаешь об этом. (или помоги советом))))
Надеюсь на твою помощь.