Уроки Arduino #2 - работа с монитором COM порта
Vložit
- čas přidán 1. 02. 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 - Věda a technologie
Начал изучать ардуино по вашим видео, очень доступно и понятно!
Максим Морган ага
мне тоже
Ну как, два года спустя, чему научился?
@@optimanshow А два?
Максим Морган шел 2019 год, как освоил ардуино?
Ох. Нельзя два лайка поставить. Один ставлю как полагается. Второй держи устно (Like). Лучшие уроки по Ардуинке, что встречал на просторах Ютуба. С нетерпением жду продолжения.
Невозможно оторваться! Жду не дождусь своих собственных компонентов, чтобы начать практиковаться.
на выборах за тебя проголосую
Да. Может ардуино в России подешевеет....
На выборах надо за компетентных в вопросе людей голосовать, а не абы за любимого блогера...
Я из будущего... Эх
@@Not_932 В ютубе надо воспринимать информацию в юмористическом контексте, а не буквально...
+ )
На 4-м курсе универа, код знаю очень плохо, да и не особо было интересно. Недавно узнал про ардуино, стало интересно кодить. А посмотрев твои ролики все понятно стало сразу. Спасибо тебе)
супер конспект. от нас лайк.
Годный канал, отличная подача!
Где же Ты был, когда Я робота клепал, по косым урокам, в которых говорилось "делай так, просто делай так и не спрашивай почему", а не рассказывалось откуда ноги растут!
А теперь Я делаю наливайку для пива, по Твоим урокам и это здорово! Спасибо Тебе огромное!
Cпасибо, все понятно и доступно. Всех благ!
самые годные уроки что я сейчас нашёл!!!
Спасибо тебе огромное!!!
Всё разложено по полочкам от А до Я и не остаётся вопросов от слова *absolutely*. Качественный контент от человека со знанием своего дела и как показывает практика, думающего за нас, а это очень важный момент!.
P. S. Вперёд в кремниевую долину!
Неа. Я уже задолбался пересматривать на 4:28 всё как-то слишком непонятно.
@@Obeme77777Serial.println() - команда, которая выводит на экран то, что ты ввёл в скобочках или что записано в переменной. Но при этом переводит на следующую строку.
A Serial.print() - тоже самое, но не переводит на след. строку
Легче на самом деле попробовать самому пописать код, тогда станет ясно)
Очень качественные и доступные материалы. Спасибо!
Твои уроки лучшие! Продолжай в том же духе!
веду конспект...честное слово)) ..так лучше запоминается
+Nikita Degterev молодец)
И чё, как, выучил?
@@user-tq1lr3uv5t та всё, видишь, пропал человек. Больше нет его. Ушел программировать наверное
@@vitalin5953 а я не пропал)
@@user-tq1lr3uv5t а зачем учить ? пользоваться нужно.
Вот оно. Будущее Ютуба!
Уже настоящее. Ютуб - двигатель прогресса.
Кто сдесь уже в 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!
спасибо большое за уроки ) мне для проектов ) как раз нужно умение программировать в данной сфере) все очень понятно ) и когда будет время ) начну вести интрадей с записями )
Спасибо за ваши уроки!! Продолжайте в том же духе! Упорно веду конспект)))
Спасибо ! Четко и просто без лишнего! А то начинаешь понимать этот язык программирования и каааааак загадят буфер обмена (мозги) так сразу все забываешь . Давно искал искал подобные видосики.
Спасибо за уроки!!! ардуинка мигает, радуюсь как ребенок )))!!!!!!!!
А у меня клиэнты рады я и папа радуемся как ребенок деньгам)))
Боже мой, большое спасибо тебе, святой человек, а то я реально не понимал, как работает Serial.flush
еслиб не забывал бы то каждому видосику бы лайк и комент ставил бы!!! респект!молодец!
Начал писать маленькие скетчики с комментариями напротив строчек кода по этим урокам. Пользуюсь ими как шпаргалками. Проще стало что то делать. Просто готовый код подставляешь в проект, допустим кнопку с антидребезгом, какие нибуть условия. Дело веселее пошло. А то вроде пока смотрю всё понимаю, закрою видео, через два часа и уже не помню где там запятая, как команда пишется. Мне уроки очень понравились. Больше // комментариев напротив кода, и можно самому разбираться потихоньку. Ещё бы хотелось увидеть работу с EEPROM. С библиотеками и т.д. Жду с нетерпением следующих уроков, эта тема так затягивает. Удачи и побольше видео!!!
Спасибо большое! Вы мне очень помогли. Уже подписался!
очень полезное обучение у вас , спасибо
Небольшое уточнение: название Serial это название библиотеки Serial.h; ко всем функциям библиотек надо обращаться по названию библиотеки и через точку название функции. Это может быть не понятно потому, что нужно объявлять библиотеку, но есть библиотеки, которым не требуется объявление типа: Arduino.h, Serial.h и другие, которые сами добавляются (те, что Вы не скачивали или делали сами).
библиотека Serial, а в ней класс Serial к методам которого надо обращаться, если бы класс назывался как-то по другому а библиотека так же, то обращение к методам было бы по названию класс а не библиотеки
....................
.....
Что?
оаоаоао почему мне так тяжело в это вникать...
@@user-gl5wi8ig8h еще раз что? Библиотеки??? можно подробней)
@@aguypassingby1945 см. ООП любого Си-подобного языка)
Всё очень подробно и понятно тоже веду конспект!
Спасибо, очень хорошее видео 📹)
Спасибо, очень помог. Наконец-то разорался
Орать то зачем)
@@Auzenable опЫчатка =)
Спасибо, хорошее преподавание!
Саня, спасай!
При выполнении 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).
Как лечить, а главное кого, код, ардуинку или меня?
Классное видео! Мне оно очень помогло!
Вот , СПАСИБО .
Так это то что я искал !
Ардуинщик, а если копипастить из конспекта в "описание к видео", людям будет удобней искать нужные вопросы в инете.
Доходчиво. Спасибо!
Отличный урок, Спасибо!
У меня из порта приходило число, а потом приходил 0.
т.е. отправляю 678
получаю
678
0
отправляю 12345
получаю
12345
0
Текст был такой же, как в видео
if (Serial.available() > 0)
Я начинающий и ничего не понимаю пока, но в голову пришла идея
if (Serial.available() > 1)
теперь все происходит четко, что отправляешь, то и получаешь.
Да, и максимальное отправляемое число это 2^15 - 1, т.е. 32767 а дальше будут приходить отрицательные числа.
У меня такая же проблема была
Попробовал помогло, спасибо 🙏, мне кажется это из-за разности чипов, у меня нано на ATmega328P (старый загрузчик/Old Bootloader)
Спасибо! Учимся)
Спасибо за классный видос. Лайк!
Спасибо за видео и советы
Алекс, сделай плиз такой же(досканальный и понятный) курс по c++ и главное поглубже залезь в кроссплатформенность... ну плиз... что я стараюсь, меня всё равно не увидят...
Отлично. ТО, что надо.
Чёт прям Паскаль вспомнил
Аж прослезился...
Так в одном выпуске говорили что если вы знаете этот язык программирования, то вы освоили 90% Ардуино.
Этот язык напоминает как паскаль так и с++
Алекс, огомное вам спасибо. Скажите пож-та, почему вы выбрали тип данных String для объявления переменной mystring = OLOLOLO? Можно ли другой тип данных использовать для переменной, где значением является текст?
Спасибо, а то намучился с отправкой данных. А как отправить массив с данными? Только парсингом вытаскивать данные?
void setup() {
Serial.begin (9600);
}
void loop() {
if (Serial.available () > 0 ) {
int in_data = Serial.parseInt ();
Serial.println (in_data);
}
}
// Не могу понять. Пишу в порт любое число,
//затем ардуинка печатает это число в порт
// Но через секунду число становится нулем и ноль отправляется в порт.
// Почему у тебя так не происходит?
Выводится так потому что в мониторе порта радом со скоростью 9600 не выбрано "нет конца строки". В следующем видео по сериалу от автора это показано czcams.com/video/Ul03Vkg9A40/video.html
Спасибо тебе, мне 13 лет и для программирования далеко, а идеи лезут и лезут из головы. Спасибо тебе,.AlexGyver. За эти знания!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Всмысле далеко? Там все просто, же
Спасибо за поддержку
Почему далеко, закажи а Китае ардуинку попроще, пару датчиков и занимайся. С практикой и теория понятнее.
Я в пятом классе со small basic работал
Спасибо!
Отлично,спасибо!
У Вас есть видео как передавать данные видеоизображения камеры (через радиоканал 2Ггц), к примеру с квадрокоптера, на пульт снабженный дисплеем nexton? Если такого нет, то запишите такое видео. Будет очень интересно узнать способы реализации такого проекта.
Привет. Подскажи как сделать так что бы дисплей NEXTION взаимодействовал с двумя ардуинами одновременно. Может какие модули нужны или вся намного проще?
Разобрался, спасибо
Для 1с-ника всё понятно)
мне 12 и всё понятно ,супер
ох где же ты был, когда мы с++ проходили :(
В нашем классе проходят по информатике с++ а я как всгда получай чут ли не 6 за то что я обяснил училке новую команду а про домашки я ваше не говорю))
Год прошел, но все-таки спрошу. Что делать если после ввода числа в буфер через серию команд "Эхо":
if (Serial.available() > 0) {
int val = Serial.parseInt();
Serial.println(val);
}
В буфере порта вместе со значением заданной переменной val, которую я ввел, появляется еще и число 0. Вне зависимости от от моего числа далее идет число 0. Это работает и с условными операторами, таже проблема. На сколько я понимаю в будущем при построении сложных программ, это может мешать. Заранее спасибо за ответ.
Такая же фигня, дайте ответ пожалуйста!
Нашёл ниже: "В мониторе порта нужно выбрать вместо "Новая Строка " -"Нет конца строки""
@@user-el9nt8fu9q Спасибо огромное!
с нулём баг исправил и какой-то непонятный баг. Не выводит первую цифру а если ввожу например 1 то вывожит 0
Понял в чём баг. Вместо Serial.available заюзал Serial.read
полностью повторял код, нет никакого отличия, но при варианте с -'0' на любое введенное число ответ -38, а при варианте с parsInt при любом введенном числе и цыфре выдает ноль. это почему так ?
Alex, монитор порта это хорошо, а как на счет написания проги под виндой на чем нить с пояснениями (у вас довольно доходчиво получается) и управлять ардуино... Ну типа пара кнопок в программе, через ком порт на ардуино управлять вкл выкл светильника.
Камрад, ценные видосы, спасибо! вот одну тонкость только не пойму - у меня кириллица не работает при выводе в монитор сом-порта, наверняка нужно какую-то библиотеку куда-либо добавить.. вот только какую и куда - не знаю.
Очень интересно, юзаю аппаратный уарт в связке с esp подкинул dfplyer на нано к soft серял и все на аппаратом данные вроде идут ток не доходят. Подскажите пожалуйста что они в месте не дружат? Скорость 4800 на аппаратной на программной 9600
У Serial.read есть какой-нибудь буфер или символ конца сообщения, когда мы посылаем несколько символов/цифр за раз?
Спасибо!
На языке С+ можно писать для ардуино?
Привет Алекс.
Как совместить это с твоей копилкой??
Можете подсказать, как сделать так чтобы arduino считывала значения из excel и на основании этих данных переключала реле?
Посоветуйте, как принимать и обрабатывать на Ардуине картинку с камеры и на что эту картинку записывать.
В среде Arduino применяется обработка данных по прерыванию ? Например, когда для выбранной платы есть аппаратная поддержка какого-то протокола (SPI, UART, Ethernet и т. д.), используется режим ожидания приёма (Salve) и приходит пакет, можно ли вызвать программное прерывание и читать приёмный буфер только тогда, когда в нём что-то есть ?
Спасибо вам за Ваше творчество, все понятно и доступно даже для новичков (такого как я) .
Можно ли где-то задать Вам простенький вопрос с приложением простенького скетча ? кое что не понятно
Здадите мне) наверно справлючь
и во вторых алекс работает за деньги можно заказать код у него
Алекс привет! У меня научная работа имеется. Так вот для съёма данных требуется аналоговый вольтметр и амперметр до 60 вольт и 5 ампер и всё это выводить на экран в виде графика. С программой я разобрался а вот с вольт метром нет. Может ты что знаешь по этой теме и как её решить.
У меня ,когда я прописываю " - '0' ", выводится цифра,которую я вписал и "-38", в чем может быть проблема?
a - '0' прописывали к функции read или parseInt?
В COM порте выбери "Нет конца строки".
@@Pryxa4 Спасибо
Pryxa4 спасибо
@@Pryxa4 Господи, спасибо огромнейшее, успел задолбаться пока выяснял почему это происходит.
Здравствуйте, я когда пишу скорость бит в сек, там совпадает с монитором, 9600, но показывает иероглифы, заметьте пожалуйста.
Очищение пригодится если мы хотим получать значение с физ кнопок а в порт выводить картинку "игры"
Товарищи всем доброго времени. можно ли написать скетч на основе которого можно было бы кнопки на самодельном джостике нажатие которых заставить отображаться в среде винды и назначать на исполнение в игре?
Алекс, а что если какая-то программа будет постоянно слать в порт определенный набор в 64 символа, но ардуино не будет забирать их все, а только ситуативно? Переполнение буфера очевидно, интересно заберёт ли ардуино целый (с точки зрения структуры данных) набор? Или он как стек сдвигает влево/вправо?
смотрю второй видос, ардуино для новичка! Если с первым зашло то со второго урока вообще не понятно. Буду больше изучать.
Очень круто. Спасибо. Но у меня Aruino под рукой. Есть ESP8266, все примеры работают но в выводит в порт кроказябры ( Что делать?
3:06. Так ведь можно тогда сделать автономный калькулятор сист. счисления на ардуино, просто докупить отдельный дисплей и прицепить штук 10 кнопок. Главное чтоб пинов хватило. Хотя это очень грубый,конечно, получится калькулятор. И в школке на уроке информатики на к\р быстро переводить числа из одной системы в другую.
И так господа. На дворе 2022год и я ,решил после с++, поучить ардуинку. Столкнулся с проблемой вывода в порт, просто не выводило нечего. Serial.begin(9600);
Serial.print("Hello");
По видосу должно было вывести слово: Hello. Но не выводилось. Решением стала команда задежки delay.
Serial.begin(9600);
delay(1000); // задержка в одну секунду
Serial.print("Hello");
Только после этого у вас все заработает :)
Я так понимаю, выводить можно цифры и в кавычках, как текст, если я не собираюсь их как то преобразовывать или делать с ними действия
а вот мне хочется построить кокпит для авиасима, dcs- вот с механникой мне всё понятно, и с тем что нужно пилить сверлить варить клеить и тд., а вот с электроникой большие проблемы... и как это всё сгенерировать?
благодарю за приятную музыку на фоне, а не какой-нибудь манальный deephouse.
Просветите пожалуйста: получил китайскую ардуину, установил последнею программу для ардуины 1.6.7 , драйвера для кит плат - в итоге компиляция не происходила писала ошибку. тогда установил 1.0.6 . При подключении платы к компьютеру на плате ни чего не загоралась. попробовал скомпилировать все удалось. Написал программу как в вашем видео - программа работает (вывод надписи), но также ничего не светится. что за хрень? катайцы сэкономили на светодиодах?
Спасибо
Привет.
Я хочу сделать голосовую интеллект для телевизора, чтоб использовать место пульта.
Как собрать плату для данного задач. Сделайте пожалуйста видеоролик по этой направления.
Спасибо заранее
Спасибо вам за ваше творчество и труд.Очень понравился ваше уроки.Прошёл обучение до конца.Хочу задать вам один вопрос.Как передать в порт состояния пинов (High/Low) в массиве для дальнейшей работы в стороне компа?
Все просто
Если вы имеете дело с аналог пинами просто пишите
Serial.println (analog.Read (ваш пин));
Для цифровых пинов же :
Serial.println (digital.Read (ваш пин));
Для цифрового пина будет выдовать только 1 или 0
А в аналовом пине будет выдавать значение от 0 до 255
После ввода значения какого-то в мониторе порта, оно в буфере остаётся или как? И ввод значение через 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 миллисекунд задержки.
cout
при работе с буфером выдает function-definition is not allowed here before "{" token, подскажите может я что то пропустил?
Подскажите пожалуйста, я сделал это "эхо", но каждый раз после вывода числа выводится 0 с новой строки
такая же проблема, сразу сбрасывает значение переменной до нуля
ты супер!
Всем здравия! Почему у меня при вводе Serial.println ("Русский текст"); - выводятся спец символы? серый ромбик со знаком вопроса внутри. Программа и сохранения специально установлены без кириллических символов в пути сохранения. С Serial.println ("English text"); проблем нет.
На счет Serial.parseint () можно убрать эту задержку при помощи Serial.Timeout (2) в setup()😊
а можешь подробнее друг рассказать об этом
Подскажите пожалуйста, как обработать слово из нескольких букв? то есть: пишешь слово (fgh) он выдает код по типу 104103102. помогите пожалуйста.
Видимо я рукожоп.. Alex, я всё делал как ты показывал на видео. Но вместо "HELLO, WORLD!", СОМ порт выводил вообще лютую дичь, типо такой : ЂxxxшxшxшxшxЂшxxшxЂxшxЂx. Пожалуйста помогите моему рукожопству) и видосы у тебя всегда годные Alex)
Можно ли как-то отправлять данные ардуине через другую программу?
И как его прочитать и сложить в массив. Спасибо
Здравствуйте! классные видео! всплыл вопрос - может ли ардуино считывать коды с COM порта которые "кидает" сторонняя программа? если да, то буду ждать когда видос запилите 👋
Пермяков Михаил может, почему нет. Вот только это уже не про ардуино, это про программирование окошек.
5:40 у меня этот код после каждого ввода добавляет строчку "-38"
у меня тоже
Как исправил?
@@raufgimadeyev , В окне COM-порта внизу справа выбери в выпадающем списке "Нет конца строки"
@@user-gd1xv7ny8y спасибо большое)
@@user-gd1xv7ny8y Час сидел бился над этой хренью, пока не залез в каменты. Спасибо.
важно для свази двух ардуинок по rx-tx
Как в IDE Arduino, мониторе порта, вывести русский текст? Есть инструкция?