Уроки Arduino #5 - работа с цифровыми портами и подключение кнопки
Vložit
- čas přidán 26. 03. 2017
- В этом уроке будем изучать работу с цифровыми портами Ардуино, научимся подавать и считывать цифровые сигналы при помощи функций digitalRead и digitalWrite, а также изучим режимы работы цифровых портов Ардуино. Основываясь на усвоенном материале, подключим к Arduino кнопку, и научимся считывать нажатия.
▼ Текстовая версия ▼
alexgyver.ru/lessons/digital/
▼ Огромный стартовый набор 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 - Věda a technologie
я который затрахался искать нужный резистор, выпаивал его с платы...... а потом мне сказали про встроенный
не думал, что когда-то буду так радоваться загорающемуся диоду на микросхеме
ааааа я аж плакал когда прочитал +++++++++++++++++++++++
@@user-rg7zv8fn1x ))))))))))))))))
Добрый день! Сделайте пожалуйста видео как сделать сервотестер штобы углы отклонения сервомашинки можно было видеть на экране монитора.
Когда я первый раз запрограммировал моргание светодиода лет 20 назад, и он заморгал, я поумал, что это совпадение, и на этой ноге всегда все моргает и лишь изменив delay я понял что я повелитель моргания
Что бы там ни говорили "серьёзные дядьки-программисты", осознание того, что светодиод загорелся потому, что это микроконтроллер выполнил, написанный тобой, программный код, доставляет огромную радость! Алекс, спасибо за твои уроки! Смотрю и учусь потихоньку, восторгаясь открытиями :)
вы пишите не код, а СИ-образный скрипт. а уже среда компилирует его в код данного МК. с ей (среде) только известной степенью эффективности.
если хочется писать код, то это ассемблер. разный, с кучей разных заморочек под разные МК.
@@fokinDim но ведь программа, написанная на языке ассемблера, - это тоже скрипт для ассемблера. Вот если хочется писать "настоящий код", тогда уже машинными кодами в бинарном виде. Все остальное так - детские поделки всяких ассемблер скриптеров-недоучек. А если по существу, так все эти ваши ужимки на программируемом чипе - это неэффективно, программы надо паять прямо в железе nand-гейтами, тогда работать будет быстро. Это точно тру.
@@agilov @agilov нет, ассемблер это не скрипт! это и есть машинный код определенного процессора/контроллера, просто в виде лучше читаемой мнемоники.
например, эти записи совершенно тождественны. это одно и то же:
org $A000
ld a, FF
call $1000
A000: 3E
A001: FF
A002: CD
A003: 00
A004: 10
A005:
но я кажется понял, о чём вы: если вы выставляете кусок на асме (да хоть в 0x0000h кодах) среди скрипта в си-компиляторе приложений под операционные системы (!) и такой радостный думаете, что на этом куске процессор, для которого вы пишите реально откроет вам свои регистры, какие вы назначили, флаги, адресное пространство .. то хаха, скорее всего - нет.
но это не отменяет факта, что ассемблер - это и есть машинный код.
@@fokinDim все верно ассемблер это не скрипт, ассемблер это программа, которая читает скрипт написанный на языке ассемблера, интерпретирует его и на выходе выдает последовательность машинных комманд уже на чистом машинном языке. Если мне не верите - почитайте вот эту статью например: ru.wikipedia.org/wiki/Ассемблер. Прошу прощения, конечно, что срываю покровы и разрываю шаблоны, но файл с текстом на языке ассемблера это скрипт и с этим ничего не поделать, придется с этим жить.
@@fokinDim А вы - душите без особой на то причины
спустя 2 дня и кучи нервов этот чертов светодиод начал загораться с кнопки!!!!! паск*уда)))))
Где были эти уроки, когда я решился попробовать дуинки и писать скетчи... Без понимания простых вещей даже сайт с описанием команд не особо помогал. А теперь вот смотрю выпуски, имея маленькое понимание происходящего, да познаю новое) большое спасибо!
Какой же ты молодец, фантастически качественный контент! Тысячу раз благодарю!
Спасибо! Благодоря этим уроком время от времени делаю всякие полезные штучки!
Спасибо Гайвер сделал урок счастья до конца дня.
Во вот таких уроков по больше, для меня новичка очень понятно стала работа кнопки
Добротные уроки, спасибо!
Автор, огромная благодарность тебе за твои уроки. Все понятно и приятно слушать. Обнял!
приподнял
Самое главное даже ребёнку в 12 лет все понятно. Я поражаюсь до них доходит быстрее, чем до некоторых взрослых. Классно приподносишь материал. Респект!
какие умны дети мне 40 лет нихрена не понятно
Так детский мозг более пластичен и готов ко всему новому. Я помню в младших классах запоминала английские слова чуть ли не с первого раза, а сейчас так не могу, надо напрягаться немного.
Огрооомнейшее спасибо, Алекс!
Ураа! Новая серия! Божеж, ты можешь, прям счастье!
Алекс) спасибо за труды!
спасибо за input_pullup а то я уже замучился с этими резисторами (много кнопок), теперь буду знать
Спасибо за помощь) благодаря тебе все заработало)
Спасибо за видео.
Можно дополнить, что если включить между А5 и 5+ резистор (по примеру резистора между А5 и GND), то получим INPUT_PULLUP с внешним резистором (А5 "притянется" к 5+). То же самое произойдет со всеми остальными входами, они перестанут "дребезжать" и притянутся туда куда включат резистор.
Спасибо, все очень понятно. Очень хорошо объяснил
Мужик, ты крутой, спасибо тебе!
спасибо за твои уроки трудновата но потихоньку вкуриваю
ура! неужели видео!
Спасибо за видео и советы
Спс, я ждал этого урока
Ты великий ардуинщик, желаю тебе удачи
Я заказал с твоего сайта ардуинок пару тройку штук, уже 3 недели едут, думаю скоро доедут, ох как не терпится повтоять за тобой.
Лайк за зачётный видос!
Ну где ты был когда я мучился с кучей резисторов?? Оказывается можно так просто программно это всё сделать!
Огромное спасибо!
Алекс, ты МОЛОДЕЦ!!! У меня есть то набор, который ты показывал(или рекламировал))) и ещё дополнительно куча барахла к нему. Вот я в JavaScript - прошареный паца, а в c++ вообще 0. Половину того, что ты рассказываешь я знаю. Только немного отличается.
Спасибо!!!!!!!!!!
Алекс, расскажи пожалуйста подробнее про интерфейс I2C. Как подключить к ардуино сразу несколько устройств по данному интерфейсу.
Начинаю понимать.
Отлично, как всегда на высоте
Спасибо.
😅 отлично но здесь надо было добавить в описании подтягивающий резистор входу Ардуино. Но и так понятно. Но выходным ненужны ли стягивающие? Потому что они тоже могут давать наводки или нет? Потому что если один выход равно 1 а другой выход 0. То будут ли неверные показатели??😊
Жаль, редко уроки. Пока следующего ждёшь- предыдущий забудешь))
+Юрий Замятин очень время быстро летит. Вы сидите ждете, а я как будто вчера монтировал 4ый. Универ, мать его
в армию пойдешь долг отдавать? тогда вообще долго ждать придется. а потом и вовсе забить можешь на канал.
Алекс, я понимаю, учёба- основное.
+Donald Trump нет, я лейтенантом выйду
+Юрий Замятин учеба не основное. Просто никто не любит получать пиздюлей и тройки
Ты красавчик
Жаль с универом у тебя нет времени на уроки ) пока ждал уже сам разобрался с шаговиком, лсд и некоторыми другими штуками ) Но все равно то-то полезное, но узнаю. Благодарю )
Алекс, спасибо за материал. Только по синтаксису хотел бы тебе на заметку сказать, что есть практики написания "читаемого" кода, в котрых рекомендуется, например, в обязательном порядке, ставить фигурные скобки для конструкций иф-элс, и прочее-прочее (есть дажее штуки типа tslint и типа того, которые подсвечивают "кривой" синтаксис в средах разработки).... В том числе различные принципы типа DRY и тому подобное. Думаю тебе, как человеку увлеченному, полезно будет ознакомиться, хотя бы для общего развития + опять же плюс в карму от бородатых трукодеров :) Код станет более читаемый и понятный. Это не претензия и не нравоучение - просто заметка бывалого программиста :) В остальном - спасибо! Большое дело делаешь, и делаешь хорошо!
vsem pohui
@@llllNEOllllchannel я не все, мне нужны скобки и комментарии.
Это все правильно и хорошо, но Arduino IDE просто заставляет ненавидеть чистый код со всеми ее через задницу работающими отступами, глючащими подсказками и прочими "прелестями".
спс за видос
Сделай ,пожалуйста, следующий урок по подключению дисплеев к ардуино и их программированию
чего
Да сделай
@@skyhobby611 а что такого
В самом последнем скетче: строку boolean button1 и далее - упразднить. Cледующую за ней строку тоже стоит упразднить (ибо 13 порт - выходной, и зачем мы с него что-то читаем - непонятно).
Условие if - упразднить.
добавить digitalWrite(13,!digitalRead(A5));
+Chuviw да знаю. Это не готовый код, это просто пример работы
супер
Привет. Очень интересно все это. Ты обещал рассказать как сделать блютуз передатчик для контроллеров без танцев с бубном))). Поделись плиз.
Алекс, давно за твоей работой наблюдаю, молодец. Спасибо тебе. У меня вопрос такой покажи как выводить тактовую частоту процессора разделив её на переменную равную от 2 до 128. Спасибо
Блин, ну ты даешь! Я поставил видео на паузу, написал код как ты показал - так все начало глючить при приближении руки к плате. Полез в нет, ничего толком не нашел, задолбал после посетителей форума амперки - и тогда нашел эти два варианта с резистором и через пуллап. После этого как все начало получатся продолжил смотреть ролик - и ты все через 30 сек сказал!)
сделай видео про инфрокрастный приёмник
когда на практике пришло осознание нахера подтягивать к земле резистором питание, прям кайфанул :-D
Быстро все объясняешь, на скорости 0.75 только можно уловить суть. А так отличные видео, с книгой по ардуино сидел неделю, так и ничего не понял, а тут все понятно. Спасибо, ждем новые видео. С термодатчиками бы что нибудь и датчиками влажности.
Я смотрю на скорости 2
Александр, расскажи как создавать классы и использовать их в сложных программах.
Алекс, дай пожалуйста ссылку, чтобы почитать и понять, зачем и когда и насколько Ом подключать резисторы?! (что здесь, что при работе с масфет-транзисторами - не пойму) Буду очень признателен!
Вот это совсем другой вид уроков! я заново все учу и выкидую стили других уроковедов!
Я думал что кнопке нужно +5 вольт всегда на ее распознавание и подачи тока на цель. светодиод скажим!
Сударь, вы изумительные видео снимаете. Я восхищён до охуения. Премного благодарю вас.
4:38 странно, у меня изначально не по нулям, а с лева 1, а справа 0. Почему так?
у меня тоже, не могу найти проблему
Алекс, а какая мощность рассеивания у встроенного резистора (ВР) в Ардуинках? Я правильно понимаю, что ВР всегда будет работать штатно (ведь ток управления копеечный должен быть...), и можно все пины управления/чтения на всех навешанных модулях притягивать через него?
у меня почему-то, пока к пину не подключить нагрузку( светодиод например) то в мониторе показывает 1 на цифровых пинах
та же проблема
БОГ ЕСТЬ ЛЮБИТЕ БОГА И СВОИХ БЛИЖНИХ!!!☦❤🙏
Алекс, а что по поводу встроенной поддтяжки входов, есть ограничения? Читал рассуждения на тему выжигания ног МК... Не будет ли надежнее использовать внешние резисторы? Что думаешь на этот счет?
+Вячеслав Бард думаю что такой херни у меня никогда не случалось
ставлю лайк даже еще не смотря
пхахах
Важная мелочь - к аналоговым пинам можно подключать дискретные сигналы, и обрабатывать их.
Всё очень интересно и понято. Спасибо большое за урок!
Кстати, у меня одного проблема с контактами, когда подключаю к белой плате? Контакт то есть, то его нет. Если делаю всё напрямую, то норм, а на плате как-то странно...
Да, контакты изнашиваются, можно их достать поджать
Напряжение высокого уровня не равно 5В из-за защитного диода на входе питания от USB, он находится прямо под разъёмом.
Для новичков. Итоговый код будет более оптимален в таком виде:
boolean but;
void setup() {
Serial.begin(9600);
pinMode(A5, INPUT_PULLUP);
pinMode(13, OUTPUT);
}
void loop() {
if (but == digitalRead(A5)) {
but = !digitalRead(A5);
digitalWrite(13, but);
Serial.print("Button: ");Serial.println(but);
}
}
Не будет постоянной отправки данных на 13 пин и в консоль, в которой не будет постоянного мерцания значений.
Объясните пожалуйста, для чего нужны циклы if, если можно на светодиод напрямую выводить состояние с кнопки?
Недавно узнал: "тактовая кнопка" на самом деле ТАКТИЛЬНАЯ кнопка. )) Т.е. такая кнопка, которая отзывается кликом на нажатие (обеспечивает оператору тактильные ощущения = осязание события нажатия кожей пальца ). Даже не знаю, зачем я всё это написал. Всё равно всё останется как есть. +1 за труды, всех благ!
Алекс, я так обрадовался когда ты начал делать эти уроки. Ждал каждый, но пока они выходили выучил всё сам. Перерывы чертовски долгие. Я понимаю тебе сложно, но выбери определённую тему. Страдают все! И люди с квадрокоптерами и всякие оружейники и Ардуинщики и чёрт возьми даже вейперы!!!
+mine miner ну, увы...
Я с тобой не соглашусь по портам. Один порт объединяет несколько пинов. На ардуино нано доступно три порта: PORTD(цифровые пины D0-D7), PORTB(цифровые пины D8-D13), PORTC(аналоговые пины А0-А5). Вместо того, чтобы возиться с каждым пином по отдельности, иногда легче задавать значение всего порта сразу, к примеру, при управлении семи-сегментным дисплеем в режиме развёртки напрямую от ардуино.
+Engie вот такой инфы я еще нигде не видел....
Вот информация на официальном сайте arduino:
www.arduino.cc/en/Reference/PortManipulation
Следует заметить, что управление портами напрямую работает быстрее, нежели digitalWrite или digitalRead, об этом написано тут, например:
www.billporter.info/2010/08/18/ready-set-oscillate-the-fastest-way-to-change-arduino-pins/
где-то есть видео как ускорить программы написанные в "ардуино иде" в 20 раз.
Круто я купил плату Wawgat - она дешевле ардуинки ( моя первая для тестов ) и она со всем справляется на 5 !
Алекс, сделай скрытый дверной замок с RFID модулем, чтобы его снаружи двери не было видно. Хочу себе в квартиру сделать как дополнительный замок, но пока с ардуинкой дел не имел, жду пока приедет с алика ;)
Я видел подобный ролик на ютубе, но там прям колхоз
Всё, что не смотрел - всё колхоз. По этому и предложил Алексу снять )
Блин так же мудрил с кнопкой, она еще долго ловит случайные срабатывания, потом узнал про резистор (на 10 ом не было, поставил какой был) и стало норм, но я подумал что неужели такую фигню не предусмотрели создатели, а вон оно что INPUT_PULLUP =)
отлично работает от USB, но когда питаю от кроны 9В через входы Vin и GND то не работает. Как правильно подключать кнопку при использовании внешнего питания?
Лулз словил от постоянно моргающего "Butt" на пятой минуте. XD
Здравствуйте! Не могли бы вы сделать что-то типа сигнализации, работающей через модуль NRF24L01 с вибродатчиком? При вибрации идет сигнал на ардуино и загорается светодиод на 3-4 секунды. Буду благодарен! Смотрю все ваши видео, так вот и сам хочу что-то смастерить.
Здоров Саня! Такой вопрос. Как к одной ардуино, (допустим нано) подключить и реле на 8 выходов, от 8 ми кнопок, и градусник, и сервопривод, от резистора, все одновременно. имею в виду как скетч выглядит...
If (button1 = 1) digitalWrite(13, 1);
else digitalWrite(13, 0);
От этих строк меня, програмиста с двадцатилетним стажем, ПОКОРОБИЛО!
Оно, конечно, работает, но лучше написать просто:
digitalWrite(13, button1);
Не совсем понял про подтягивающий резистор, точнее про принцип его работы. Почему он убирает "ошибки"?
У проводов есть паразитная емкость. Убираем провод - заряд остаётся. С резистором по другому - у него огромное сопротивление, и когда подключены настоящие 5 вольт, то он не может спустить весь ток на землю (ардуино видит высокий сигнал), но когда мы выдернули провод - резистор спускает маленький остаточный заряд на землю (ардуино видит слабый сигнал 0v или LOW). С pullup резистором всё примерно так же, но притягиваем не к земле, а к 5 вольтам. Как то так.
+kkjey wheiss он не убирает ошибки. Он устанавливает на пине четко понятное для микроконтроллера напряжение. Без подтяжки пин висит в воздухе, и ловит всякие наводки
Спасиб
Хотелось бы подробнее узнать о нюансах ардуинки и основах электроники, для понимания, а не для запоминания.
Например, не понятно откуда берётся питание 5v в последней схеме на входе pinMode(A5, INPUT_PULLUP). Как я понял, вписывая "INPUT_PULLUP", мы не просто добавляем подтягивающий резистор, а ещё напряжение 5v на входной пин. То есть, ардуинка замыкает 5v и пин и постоянно выдаёт логическую единицу на любом пине, где прописано "INPUT_PULLUP".
Пулап и есть подключение (подтягивание) пина внутренним резистором к пяти вольтам. То есть на пине они есть и стабильно читаются как логическая единица. Однако при прямом замыкании пина на землю кнопкой на нем получается логический ноль.
и я тоже в панике смотрю.. откуда ток если оба конца в минусе стоят... что за волшебство и откуда взялась инверсия...
Класc👍👍👍
Serial.print("Button1: " + (String)but1 + ", Button2: " + (String)but2 + "
");
То же самое, только занимает одну строку.
оператор + объединяет строковые значения тоже.
+ "
" удаляй, и используй println ) .. Но за объединение строк и чисел спасибо!
Здравствуйте! можно ли к одному цифроаому порту подключить несколько кнопок сразу?
А я вот написал digitalWrite(6, button); и результат такой же, как и у тебя. светодиод загорается при нажатии кнопки.
у меня короче.
Подскажите название исполнителя джазовой музыки в ваших роликах.
а как подключить сенсорную кнопку к управляемой ленты на вкл и выкл WS2813
На 5:15 пин D13 работает корректно потому что по умолчанию на схеме к нему подключен светодиод через резистор?
PULLUP можно использовать один раз? Или сколько угодно, и не перегрузится ли резистор?
10ком, даже если 20 портов не страшно, до 50ма не дойдет
@@user-gm8dh5yw8t ты, я смотрю, шаришь в электронике, резистор для чего там нужен?
@@Bagasl чтобы не спалить плату, если + 5 вольт соединить с - 5 вольт (землёй или gnd) без резистора получится короткое замыкание.
@@deceiveitself7275 с резистором же такое же КЗ просто ток меньше, не?
@@Bagasl Нет. КЗ это короткое замыкание, при котором по элементам цепи идёт недопустимо большой ток, в следствии чего как правило элемент выходит из строя. А резистор ограничивает этот ток до приемлемых величин
Спасибо. Но хотелось бы обьяснения почему с подключением резистора сигнал начал читаться нормально. И почему когда мы используем PULLUP нам не нужны +5V, а вместо этого мы подключаем к земле. Откуда у нас тогда высокий сигнал идет?
Высокий сигнал идёт с pullup
Хорошие уроки и понятно.Можно желательно все подробней обяснять например зачем двойное равно и т.д.
+Arduino esp это объяснялось в прошлых уроках. Если я буду объяснять все заново в каждом выпуске, никакого прогресса не будет вообще
Когда уже будет проект ЧПУ......жду не могу прям
У меня слишком короткий провод от ардуинки, поэтому приходится работать под столом)Можно ли его как-то удлинить?
А можешь сделать видео так же, но про уно, я пытался повторить но не получилось.
Всё круто работает всегда на видео но у меня всё как всегда) точ в точ программу написал как на видео но при попытке проверить скетч ошибка
'button1' was not declared in this scope
Алекс, у меня Arduino NANO. Я установил все программы, всё работает, но у меня не горит светодиод зелёным на ардуинке как у Вас на видео. Это проблема или нет?
сыну пригодилось в создании опрыскивателя для цветов
В чем разница подключения кнопки к arduino по 2 проводам и по 3 проводам кроме числа проводов?
Почему то у меня D12 и D13 по умолчанию в ком порте выдают 1, даже в сетапе вводил digitalWrite(13, 0) после компиляции и загрузке все равно выдает 1 и зажигает светодиод. Зато с А5 все нормально, работает как в видео...
а 2х контактный геркон можно подключить через input_pullup?
А если подключить кнопку через резистор могу ли я узнать его сопротивление в режиме input_pullup при нажатии на кнопку?
Через аналоговый пин можно. Загугли омметр на ардуино
Привет, Алекс! Никак не могу понять почему на моменте 4:52 у тебя на второй кнопке сигнал равен нулю. Ведь ты убрал старую прошивку, на которой подавал на D13 низкий сигнал. Разве светодиод на плате не должен снова гореть и сигнал быть единицей на Button2 ?
тоже самое, плюсую
4:39 написал код идентично, только порты другие, т.к. использую мегу 2560. в мониторе на button2 показывает 1. В чем причина может быть?
Аналогично