Уроки Arduino #2 - работа с монитором COM порта
ฝัง
- เผยแพร่เมื่อ 1 ก.พ. 2017
- В этом уроке рассмотрим такую важную часть работы с Arduino как монитор порта. Научимся отправлять данные с Ардуино и читать их на компьютере, а также принимать отправленные с компьютера данные самой Ардуиной.
Следующий Arduino урок будет про условные операторы и операторы выбора.
▼ Текстовая версия ▼
alexgyver.ru/lessons/serial/
▼ Огромный стартовый набор 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 - วิทยาศาสตร์และเทคโนโลยี
Невозможно оторваться! Жду не дождусь своих собственных компонентов, чтобы начать практиковаться.
Ох. Нельзя два лайка поставить. Один ставлю как полагается. Второй держи устно (Like). Лучшие уроки по Ардуинке, что встречал на просторах Ютуба. С нетерпением жду продолжения.
На 4-м курсе универа, код знаю очень плохо, да и не особо было интересно. Недавно узнал про ардуино, стало интересно кодить. А посмотрев твои ролики все понятно стало сразу. Спасибо тебе)
Начал изучать ардуино по вашим видео, очень доступно и понятно!
Максим Морган ага
мне тоже
Ну как, два года спустя, чему научился?
@@optimanshow А два?
Максим Морган шел 2019 год, как освоил ардуино?
Очень качественные и доступные материалы. Спасибо!
Cпасибо, все понятно и доступно. Всех благ!
Спасибо тебе огромное!!!
Всё разложено по полочкам от А до Я и не остаётся вопросов от слова *absolutely*. Качественный контент от человека со знанием своего дела и как показывает практика, думающего за нас, а это очень важный момент!.
P. S. Вперёд в кремниевую долину!
Неа. Я уже задолбался пересматривать на 4:28 всё как-то слишком непонятно.
@@Obeme77777Serial.println() - команда, которая выводит на экран то, что ты ввёл в скобочках или что записано в переменной. Но при этом переводит на следующую строку.
A Serial.print() - тоже самое, но не переводит на след. строку
Легче на самом деле попробовать самому пописать код, тогда станет ясно)
супер конспект. от нас лайк.
самые годные уроки что я сейчас нашёл!!!
Годный канал, отличная подача!
Где же Ты был, когда Я робота клепал, по косым урокам, в которых говорилось "делай так, просто делай так и не спрашивай почему", а не рассказывалось откуда ноги растут!
А теперь Я делаю наливайку для пива, по Твоим урокам и это здорово! Спасибо Тебе огромное!
на выборах за тебя проголосую
Да. Может ардуино в России подешевеет....
На выборах надо за компетентных в вопросе людей голосовать, а не абы за любимого блогера...
Я из будущего... Эх
@@Not_932 В ютубе надо воспринимать информацию в юмористическом контексте, а не буквально...
+ )
Отличные видео!!! Автору респект!!! Мне как начинающему - просто находка!!!!! Ждем новых видео...
Молодец. Проект очень очень полезный. Многих тебе сил. Не слушай троллей и неудачников.
Ты все очень доходчиво объясняешь и надо бы упомянуть о действиях с физической системой
Вот оно. Будущее Ютуба!
Уже настоящее. Ютуб - двигатель прогресса.
Кто сдесь уже в 2021?
@Roomit YT я тоже :)
Я тоже
@@user-gm7jy5xs2y я
Почему, когда я использую int s = Serial.read() - '0'; мне возвращает не только то, что ввожу я, но и - 38.
А при использовании int s = Serial.parseInt(); кроме вводимых чисел возвращается 0?
В мониторе порта слева от выбора скорости есть параметр переноса строки, нужно выбрать "Нет конца строки" и вывод станет нормальным.
'0' - это 0х30 или 48 в десятичной системе.
позиция 48 в таблице ASCII - это позиция символа '0', 49 - символа '1' и т.д., но проще в HEX
0x30 - '0'
0x31 - '1'
0x32 - '2'
0x33 - '3'
0x34 - '4'
0x35 - '5'
и т.д. поэтому вычитание '0' или 0х30 - это просто перевод индекса таблицы в число.
ничего не понял
@@yraron открой таблицу ASCII и станет все понятно
@@yraron другими словами это совпадение и удача, что цифры от 0 до 9 идут по-порядку в таблице ASCII и можно таким "лайфхаком" превратить индексы символов (индекс цифры 1 = 49 например) в их цифровое значение (по умолчанию вместо 1 получаешь 49, а так вычитая 48 получаешь 49-48 = 1)
@@passenger000 спасибо
Вот почему бы в уроке автору этого не сказать! Да? А то "это придётся просто запомнить" =( Мне вот, например, всегда лучше понять... Спасибо.
спасибо большое за уроки ) мне для проектов ) как раз нужно умение программировать в данной сфере) все очень понятно ) и когда будет время ) начну вести интрадей с записями )
Ты лучший! Спасибо! Благодаря тебе я научился работать с Arduino!
Спасибо за ваши уроки!! Продолжайте в том же духе! Упорно веду конспект)))
Твои уроки лучшие! Продолжай в том же духе!
веду конспект...честное слово)) ..так лучше запоминается
+Nikita Degterev молодец)
И чё, как, выучил?
@@user-tq1lr3uv5t та всё, видишь, пропал человек. Больше нет его. Ушел программировать наверное
@@vitalin5953 а я не пропал)
@@user-tq1lr3uv5t а зачем учить ? пользоваться нужно.
Спасибо, хорошее преподавание!
Доходчиво. Спасибо!
Спасибо, очень хорошее видео 📹)
очень полезное обучение у вас , спасибо
Спасибо!
Спасибо ! Четко и просто без лишнего! А то начинаешь понимать этот язык программирования и каааааак загадят буфер обмена (мозги) так сразу все забываешь . Давно искал искал подобные видосики.
Спасибо большое! Вы мне очень помогли. Уже подписался!
Спасибо за видео и советы
Спасибо! Учимся)
Всё очень подробно и понятно тоже веду конспект!
Классное видео! Мне оно очень помогло!
Отлично. ТО, что надо.
еслиб не забывал бы то каждому видосику бы лайк и комент ставил бы!!! респект!молодец!
Спасибо за классный видос. Лайк!
Боже мой, большое спасибо тебе, святой человек, а то я реально не понимал, как работает Serial.flush
Небольшое уточнение: название Serial это название библиотеки Serial.h; ко всем функциям библиотек надо обращаться по названию библиотеки и через точку название функции. Это может быть не понятно потому, что нужно объявлять библиотеку, но есть библиотеки, которым не требуется объявление типа: Arduino.h, Serial.h и другие, которые сами добавляются (те, что Вы не скачивали или делали сами).
библиотека Serial, а в ней класс Serial к методам которого надо обращаться, если бы класс назывался как-то по другому а библиотека так же, то обращение к методам было бы по названию класс а не библиотеки
....................
.....
Что?
оаоаоао почему мне так тяжело в это вникать...
@@user-gl5wi8ig8h еще раз что? Библиотеки??? можно подробней)
@@aguypassingby1945 см. ООП любого Си-подобного языка)
Спасибо за уроки!!! ардуинка мигает, радуюсь как ребенок )))!!!!!!!!
А у меня клиэнты рады я и папа радуемся как ребенок деньгам)))
Разобрался, спасибо
Отлично,спасибо!
Вот , СПАСИБО .
Так это то что я искал !
Ардуинщик, а если копипастить из конспекта в "описание к видео", людям будет удобней искать нужные вопросы в инете.
Начал писать маленькие скетчики с комментариями напротив строчек кода по этим урокам. Пользуюсь ими как шпаргалками. Проще стало что то делать. Просто готовый код подставляешь в проект, допустим кнопку с антидребезгом, какие нибуть условия. Дело веселее пошло. А то вроде пока смотрю всё понимаю, закрою видео, через два часа и уже не помню где там запятая, как команда пишется. Мне уроки очень понравились. Больше // комментариев напротив кода, и можно самому разбираться потихоньку. Ещё бы хотелось увидеть работу с EEPROM. С библиотеками и т.д. Жду с нетерпением следующих уроков, эта тема так затягивает. Удачи и побольше видео!!!
Спасибо, очень помог. Наконец-то разорался
Орать то зачем)
@@Auzenable опЫчатка =)
Спасибо
Алекс, сделай плиз такой же(досканальный и понятный) курс по c++ и главное поглубже залезь в кроссплатформенность... ну плиз... что я стараюсь, меня всё равно не увидят...
мне 12 и всё понятно ,супер
Для 1с-ника всё понятно)
Алекс, огомное вам спасибо. Скажите пож-та, почему вы выбрали тип данных String для объявления переменной mystring = OLOLOLO? Можно ли другой тип данных использовать для переменной, где значением является текст?
void setup() {
Serial.begin (9600);
}
void loop() {
if (Serial.available () > 0 ) {
int in_data = Serial.parseInt ();
Serial.println (in_data);
}
}
// Не могу понять. Пишу в порт любое число,
//затем ардуинка печатает это число в порт
// Но через секунду число становится нулем и ноль отправляется в порт.
// Почему у тебя так не происходит?
Выводится так потому что в мониторе порта радом со скоростью 9600 не выбрано "нет конца строки". В следующем видео по сериалу от автора это показано th-cam.com/video/Ul03Vkg9A40/w-d-xo.html
Спасибо вам за Ваше творчество, все понятно и доступно даже для новичков (такого как я) .
Можно ли где-то задать Вам простенький вопрос с приложением простенького скетча ? кое что не понятно
Здадите мне) наверно справлючь
и во вторых алекс работает за деньги можно заказать код у него
У Вас есть видео как передавать данные видеоизображения камеры (через радиоканал 2Ггц), к примеру с квадрокоптера, на пульт снабженный дисплеем nexton? Если такого нет, то запишите такое видео. Будет очень интересно узнать способы реализации такого проекта.
Круто
ты супер!
Камрад, ценные видосы, спасибо! вот одну тонкость только не пойму - у меня кириллица не работает при выводе в монитор сом-порта, наверняка нужно какую-то библиотеку куда-либо добавить.. вот только какую и куда - не знаю.
Спасибо, а то намучился с отправкой данных. А как отправить массив с данными? Только парсингом вытаскивать данные?
Alex, монитор порта это хорошо, а как на счет написания проги под виндой на чем нить с пояснениями (у вас довольно доходчиво получается) и управлять ардуино... Ну типа пара кнопок в программе, через ком порт на ардуино управлять вкл выкл светильника.
Спасибо!
На языке С+ можно писать для ардуино?
Спасибо вам за ваше творчество и труд.Очень понравился ваше уроки.Прошёл обучение до конца.Хочу задать вам один вопрос.Как передать в порт состояния пинов (High/Low) в массиве для дальнейшей работы в стороне компа?
Все просто
Если вы имеете дело с аналог пинами просто пишите
Serial.println (analog.Read (ваш пин));
Для цифровых пинов же :
Serial.println (digital.Read (ваш пин));
Для цифрового пина будет выдовать только 1 или 0
А в аналовом пине будет выдавать значение от 0 до 255
Чёт прям Паскаль вспомнил
Аж прослезился...
Так в одном выпуске говорили что если вы знаете этот язык программирования, то вы освоили 90% Ардуино.
Этот язык напоминает как паскаль так и с++
Hey Alex, serial Plot is also a good feature, will you do a video on this?
+Mateusz “esavier” Matejuk dont know about this! I should google for it first =)
Привет. Подскажи как сделать так что бы дисплей NEXTION взаимодействовал с двумя ардуинами одновременно. Может какие модули нужны или вся намного проще?
Саня, спасай!
При выполнении Serial.avaliable() через Serial.read() в мониторе порта вместе с символами выдает число 10 (сразу после табличного символа) (то есть, вводим в монитор порта 1, получаем 49 -38).
При выполнении Serial.avaliable через Serial.read() - '0' в мониторе порта вместе с числами выдает число -38 (сразу после числа) (то есть, вводим в монитор порта 1, получаем 1 -38).
При выполнении Serial.avaliable через Serial.parseInt() в мониторе порта вместе с числами выдает число 0 (сразу после числа) (то есть, вводим в монитор порта 123, получаем 123 0).
Как лечить, а главное кого, код, ардуинку или меня?
а ты молодец
благодарю за приятную музыку на фоне, а не какой-нибудь манальный deephouse.
Товарищи всем доброго времени. можно ли написать скетч на основе которого можно было бы кнопки на самодельном джостике нажатие которых заставить отображаться в среде винды и назначать на исполнение в игре?
Привет Алекс.
Как совместить это с твоей копилкой??
Спасибо тебе, мне 13 лет и для программирования далеко, а идеи лезут и лезут из головы. Спасибо тебе,.AlexGyver. За эти знания!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Всмысле далеко? Там все просто, же
Спасибо за поддержку
Почему далеко, закажи а Китае ардуинку попроще, пару датчиков и занимайся. С практикой и теория понятнее.
Я в пятом классе со small basic работал
смотрю второй видос, ардуино для новичка! Если с первым зашло то со второго урока вообще не понятно. Буду больше изучать.
В среде Arduino применяется обработка данных по прерыванию ? Например, когда для выбранной платы есть аппаратная поддержка какого-то протокола (SPI, UART, Ethernet и т. д.), используется режим ожидания приёма (Salve) и приходит пакет, можно ли вызвать программное прерывание и читать приёмный буфер только тогда, когда в нём что-то есть ?
а вот мне хочется построить кокпит для авиасима, dcs- вот с механникой мне всё понятно, и с тем что нужно пилить сверлить варить клеить и тд., а вот с электроникой большие проблемы... и как это всё сгенерировать?
ох где же ты был, когда мы с++ проходили :(
В нашем классе проходят по информатике с++ а я как всгда получай чут ли не 6 за то что я обяснил училке новую команду а про домашки я ваше не говорю))
Очищение пригодится если мы хотим получать значение с физ кнопок а в порт выводить картинку "игры"
Отличный урок, Спасибо!
У меня из порта приходило число, а потом приходил 0.
т.е. отправляю 678
получаю
678
0
отправляю 12345
получаю
12345
0
Текст был такой же, как в видео
if (Serial.available() > 0)
Я начинающий и ничего не понимаю пока, но в голову пришла идея
if (Serial.available() > 1)
теперь все происходит четко, что отправляешь, то и получаешь.
Да, и максимальное отправляемое число это 2^15 - 1, т.е. 32767 а дальше будут приходить отрицательные числа.
У меня такая же проблема была
Попробовал помогло, спасибо 🙏, мне кажется это из-за разности чипов, у меня нано на ATmega328P (старый загрузчик/Old Bootloader)
Здравствуйте! классные видео! всплыл вопрос - может ли ардуино считывать коды с COM порта которые "кидает" сторонняя программа? если да, то буду ждать когда видос запилите 👋
Пермяков Михаил может, почему нет. Вот только это уже не про ардуино, это про программирование окошек.
Алекс привет! У меня научная работа имеется. Так вот для съёма данных требуется аналоговый вольтметр и амперметр до 60 вольт и 5 ампер и всё это выводить на экран в виде графика. С программой я разобрался а вот с вольт метром нет. Может ты что знаешь по этой теме и как её решить.
Посоветуйте, как принимать и обрабатывать на Ардуине картинку с камеры и на что эту картинку записывать.
У Serial.read есть какой-нибудь буфер или символ конца сообщения, когда мы посылаем несколько символов/цифр за раз?
Очень круто. Спасибо. Но у меня Aruino под рукой. Есть ESP8266, все примеры работают но в выводит в порт кроказябры ( Что делать?
3:06. Так ведь можно тогда сделать автономный калькулятор сист. счисления на ардуино, просто докупить отдельный дисплей и прицепить штук 10 кнопок. Главное чтоб пинов хватило. Хотя это очень грубый,конечно, получится калькулятор. И в школке на уроке информатики на к\р быстро переводить числа из одной системы в другую.
Привет.
Я хочу сделать голосовую интеллект для телевизора, чтоб использовать место пульта.
Как собрать плату для данного задач. Сделайте пожалуйста видеоролик по этой направления.
Спасибо заранее
Можете подсказать, как сделать так чтобы arduino считывала значения из excel и на основании этих данных переключала реле?
Я так понимаю, выводить можно цифры и в кавычках, как текст, если я не собираюсь их как то преобразовывать или делать с ними действия
важно для свази двух ардуинок по rx-tx
полностью повторял код, нет никакого отличия, но при варианте с -'0' на любое введенное число ответ -38, а при варианте с parsInt при любом введенном числе и цыфре выдает ноль. это почему так ?
Год прошел, но все-таки спрошу. Что делать если после ввода числа в буфер через серию команд "Эхо":
if (Serial.available() > 0) {
int val = Serial.parseInt();
Serial.println(val);
}
В буфере порта вместе со значением заданной переменной val, которую я ввел, появляется еще и число 0. Вне зависимости от от моего числа далее идет число 0. Это работает и с условными операторами, таже проблема. На сколько я понимаю в будущем при построении сложных программ, это может мешать. Заранее спасибо за ответ.
Такая же фигня, дайте ответ пожалуйста!
Нашёл ниже: "В мониторе порта нужно выбрать вместо "Новая Строка " -"Нет конца строки""
@@user-el9nt8fu9q Спасибо огромное!
с нулём баг исправил и какой-то непонятный баг. Не выводит первую цифру а если ввожу например 1 то вывожит 0
Понял в чём баг. Вместо Serial.available заюзал Serial.read
Очень интересно, юзаю аппаратный уарт в связке с esp подкинул dfplyer на нано к soft серял и все на аппаратом данные вроде идут ток не доходят. Подскажите пожалуйста что они в месте не дружат? Скорость 4800 на аппаратной на программной 9600
всем привет! если тут есть те кто хотят начать знакомиться с языком и изучать электронику вместе, то пишите
очень заинтересовала эта тема, хотя сам работаю с другими языками
у кого есть желание, можем списаться)
Описание методов у Serial www.arduino.cc/reference/en/language/functions/communication/serial/
например readString и readStringUntil('
')
На счет Serial.parseint () можно убрать эту задержку при помощи Serial.Timeout (2) в setup()😊
а можешь подробнее друг рассказать об этом
Алекс, а что если какая-то программа будет постоянно слать в порт определенный набор в 64 символа, но ардуино не будет забирать их все, а только ситуативно? Переполнение буфера очевидно, интересно заберёт ли ардуино целый (с точки зрения структуры данных) набор? Или он как стек сдвигает влево/вправо?
сделай пожалуйcта урок про подключение Mp3 плеера к ардуино!
4:51 функция Serial.read принимает один байт, а уже в какой тип его нужно перевести остаётся на усмотрение ардуинщика.
cout
пожалуйста, сделайте видео Arduino + Bluetooth HC6
Чесно говоря я за 3серии ничего не понял! И СПАСИБО ЗА ЭТИ УРОКИ надеюсь все пойму через время!
И как его прочитать и сложить в массив. Спасибо
После ввода значения какого-то в мониторе порта, оно в буфере остаётся или как? И ввод значение через Enter производится?
Вот скетч такой в рамках 1 и 2 урока:
int del = 500;
void setup() {
Serial.begin(9600);
Serial.print("Задержка: ");Serial.print(del);Serial.println(" милисекунд.");
pinMode(13, OUTPUT);
}
void loop() {
if (Serial.available() > 1) {
del = Serial.parseInt();
Serial.print("Задержка: ");Serial.print(del);Serial.println(" милисекунд.");
}
digitalWrite(13, HIGH);
delay(del);
digitalWrite(13, LOW);
delay(del);
}
Вот если оставлять if (Serial.available() > 0), как в примере, то в моём скетче нормально вводится первый раз задержка, потом следующий же цикл Serial.available() остаётся 1, срабатывает условие и переменной del присваивается 0, т.к. в Serial.parseInt() я ничего не ввёл. Ну вот я вместо 0 в условии указал более 1 и только тогда программа заработала так, как я и хотел - ввожу с монитора порта задержку и с ней начинает мигать светодиод. Как бэ задача выполнена, но я не понял почему так происходит и Serial.available() у меня всегда 1… ну в рамках вводимых 20 … 2000 миллисекунд задержки.
Подскажите пожалуйста, я сделал это "эхо", но каждый раз после вывода числа выводится 0 с новой строки
такая же проблема, сразу сбрасывает значение переменной до нуля
У меня ,когда я прописываю " - '0' ", выводится цифра,которую я вписал и "-38", в чем может быть проблема?
a - '0' прописывали к функции read или parseInt?
В COM порте выбери "Нет конца строки".
@@Pryxa4 Спасибо
Pryxa4 спасибо
@@Pryxa4 Господи, спасибо огромнейшее, успел задолбаться пока выяснял почему это происходит.
parseInt для чисел а что нужно вписать для слов