Уроки Arduino #2 - работа с монитором COM порта
HTML-код
- Опубликовано: 26 сен 2024
- В этом уроке рассмотрим такую важную часть работы с Arduino как монитор порта. Научимся отправлять данные с Ардуино и читать их на компьютере, а также принимать отправленные с компьютера данные самой Ардуиной.
Следующий Arduino урок будет про условные операторы и операторы выбора.
▼ Текстовая версия ▼
alexgyver.ru/l...
▼ Огромный стартовый набор GyverKIT ▼
kit.alexgyver.ru/
▼ Уроки Arduino на сайте ▼
alexgyver.ru/l...
▼ Модули и датчики с Али ▼
alexgyver.ru/ar...
▼ Страница "Заметок Ардуинщика" ▼
alexgyver.ru/ar...
Теги: #arduino #уроки #ардуино #alexgyver
●●●●●●●●●●●●●●●●●●●●
► Основной канал: / alexgyvershow
► Поддержать автора alexgyver.ru/s...
► Официальный сайт: alexgyver.ru/
► Почта: alex@alexgyver.ru
Начал изучать ардуино по вашим видео, очень доступно и понятно!
Максим Морган ага
мне тоже
Ну как, два года спустя, чему научился?
@@optimanshow А два?
Максим Морган шел 2019 год, как освоил ардуино?
Невозможно оторваться! Жду не дождусь своих собственных компонентов, чтобы начать практиковаться.
Ох. Нельзя два лайка поставить. Один ставлю как полагается. Второй держи устно (Like). Лучшие уроки по Ардуинке, что встречал на просторах Ютуба. С нетерпением жду продолжения.
Вот оно. Будущее Ютуба!
Уже настоящее. Ютуб - двигатель прогресса.
Кто сдесь уже в 2021?
@Roomit YT я тоже :)
Я тоже
@@ТИМУРУС-д1з я
Спасибо тебе огромное!!!
Всё разложено по полочкам от А до Я и не остаётся вопросов от слова *absolutely*. Качественный контент от человека со знанием своего дела и как показывает практика, думающего за нас, а это очень важный момент!.
P. S. Вперёд в кремниевую долину!
Неа. Я уже задолбался пересматривать на 4:28 всё как-то слишком непонятно.
@@Obeme77777Serial.println() - команда, которая выводит на экран то, что ты ввёл в скобочках или что записано в переменной. Но при этом переводит на следующую строку.
A Serial.print() - тоже самое, но не переводит на след. строку
Легче на самом деле попробовать самому пописать код, тогда станет ясно)
супер конспект. от нас лайк.
Годный канал, отличная подача!
Где же Ты был, когда Я робота клепал, по косым урокам, в которых говорилось "делай так, просто делай так и не спрашивай почему", а не рассказывалось откуда ноги растут!
А теперь Я делаю наливайку для пива, по Твоим урокам и это здорово! Спасибо Тебе огромное!
Отличный урок, Спасибо!
У меня из порта приходило число, а потом приходил 0.
т.е. отправляю 678
получаю
678
0
отправляю 12345
получаю
12345
0
Текст был такой же, как в видео
if (Serial.available() > 0)
Я начинающий и ничего не понимаю пока, но в голову пришла идея
if (Serial.available() > 1)
теперь все происходит четко, что отправляешь, то и получаешь.
Да, и максимальное отправляемое число это 2^15 - 1, т.е. 32767 а дальше будут приходить отрицательные числа.
У меня такая же проблема была
Попробовал помогло, спасибо 🙏, мне кажется это из-за разности чипов, у меня нано на ATmega328P (старый загрузчик/Old Bootloader)
Спасибо ! Четко и просто без лишнего! А то начинаешь понимать этот язык программирования и каааааак загадят буфер обмена (мозги) так сразу все забываешь . Давно искал искал подобные видосики.
На 4-м курсе универа, код знаю очень плохо, да и не особо было интересно. Недавно узнал про ардуино, стало интересно кодить. А посмотрев твои ролики все понятно стало сразу. Спасибо тебе)
'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 спасибо
Вот почему бы в уроке автору этого не сказать! Да? А то "это придётся просто запомнить" =( Мне вот, например, всегда лучше понять... Спасибо.
на выборах за тебя проголосую
Да. Может ардуино в России подешевеет....
На выборах надо за компетентных в вопросе людей голосовать, а не абы за любимого блогера...
Я из будущего... Эх
@@Not_932 В ютубе надо воспринимать информацию в юмористическом контексте, а не буквально...
+ )
Почему, когда я использую int s = Serial.read() - '0'; мне возвращает не только то, что ввожу я, но и - 38.
А при использовании int s = Serial.parseInt(); кроме вводимых чисел возвращается 0?
В мониторе порта слева от выбора скорости есть параметр переноса строки, нужно выбрать "Нет конца строки" и вывод станет нормальным.
Cпасибо, все понятно и доступно. Всех благ!
Спасибо за уроки!!! ардуинка мигает, радуюсь как ребенок )))!!!!!!!!
А у меня клиэнты рады я и папа радуемся как ребенок деньгам)))
полностью повторял код, нет никакого отличия, но при варианте с -'0' на любое введенное число ответ -38, а при варианте с parsInt при любом введенном числе и цыфре выдает ноль. это почему так ?
Боже мой, большое спасибо тебе, святой человек, а то я реально не понимал, как работает Serial.flush
Начал писать маленькие скетчики с комментариями напротив строчек кода по этим урокам. Пользуюсь ими как шпаргалками. Проще стало что то делать. Просто готовый код подставляешь в проект, допустим кнопку с антидребезгом, какие нибуть условия. Дело веселее пошло. А то вроде пока смотрю всё понимаю, закрою видео, через два часа и уже не помню где там запятая, как команда пишется. Мне уроки очень понравились. Больше // комментариев напротив кода, и можно самому разбираться потихоньку. Ещё бы хотелось увидеть работу с EEPROM. С библиотеками и т.д. Жду с нетерпением следующих уроков, эта тема так затягивает. Удачи и побольше видео!!!
Молодец. Проект очень очень полезный. Многих тебе сил. Не слушай троллей и неудачников.
Спасибо тебе, мне 13 лет и для программирования далеко, а идеи лезут и лезут из головы. Спасибо тебе,.AlexGyver. За эти знания!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Всмысле далеко? Там все просто, же
Спасибо за поддержку
Почему далеко, закажи а Китае ардуинку попроще, пару датчиков и занимайся. С практикой и теория понятнее.
Я в пятом классе со small basic работал
Ты все очень доходчиво объясняешь и надо бы упомянуть о действиях с физической системой
Отличные видео!!! Автору респект!!! Мне как начинающему - просто находка!!!!! Ждем новых видео...
Саня, спасай!
При выполнении 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).
Как лечить, а главное кого, код, ардуинку или меня?
еслиб не забывал бы то каждому видосику бы лайк и комент ставил бы!!! респект!молодец!
Спасибо, очень помог. Наконец-то разорался
Орать то зачем)
@@Auzenable опЫчатка =)
Чёт прям Паскаль вспомнил
Аж прослезился...
Так в одном выпуске говорили что если вы знаете этот язык программирования, то вы освоили 90% Ардуино.
Этот язык напоминает как паскаль так и с++
Алекс, сделай плиз такой же(досканальный и понятный) курс по c++ и главное поглубже залезь в кроссплатформенность... ну плиз... что я стараюсь, меня всё равно не увидят...
Спасибо за ваши уроки!! Продолжайте в том же духе! Упорно веду конспект)))
void setup() {
Serial.begin (9600);
}
void loop() {
if (Serial.available () > 0 ) {
int in_data = Serial.parseInt ();
Serial.println (in_data);
}
}
// Не могу понять. Пишу в порт любое число,
//затем ардуинка печатает это число в порт
// Но через секунду число становится нулем и ноль отправляется в порт.
// Почему у тебя так не происходит?
Выводится так потому что в мониторе порта радом со скоростью 9600 не выбрано "нет конца строки". В следующем видео по сериалу от автора это показано ruclips.net/video/Ul03Vkg9A40/видео.html
Спасибо, очень хорошее видео 📹)
ох где же ты был, когда мы с++ проходили :(
В нашем классе проходят по информатике с++ а я как всгда получай чут ли не 6 за то что я обяснил училке новую команду а про домашки я ваше не говорю))
Что делать если функция parseint возвращает не только цифру которую я ввёл, но и ноль впридачу. Помогите, пожалуйста!
Что-то не так написал
Надо выбрать "нет конца строки" в порте
Вот , СПАСИБО .
Так это то что я искал !
Ардуинщик, а если копипастить из конспекта в "описание к видео", людям будет удобней искать нужные вопросы в инете.
Всё очень подробно и понятно тоже веду конспект!
очень полезное обучение у вас , спасибо
Классное видео! Мне оно очень помогло!
Спасибо! Учимся)
у меня вылетает вводимое число и следом ниже -38 при любом числе. Что с этим сделать ?
И так господа. На дворе 2022год и я ,решил после с++, поучить ардуинку. Столкнулся с проблемой вывода в порт, просто не выводило нечего. Serial.begin(9600);
Serial.print("Hello");
По видосу должно было вывести слово: Hello. Но не выводилось. Решением стала команда задежки delay.
Serial.begin(9600);
delay(1000); // задержка в одну секунду
Serial.print("Hello");
Только после этого у вас все заработает :)
Доходчиво. Спасибо!
Спасибо большое! Вы мне очень помогли. Уже подписался!
У меня ,когда я прописываю " - '0' ", выводится цифра,которую я вписал и "-38", в чем может быть проблема?
a - '0' прописывали к функции read или parseInt?
В COM порте выбери "Нет конца строки".
@@Pryxa4 Спасибо
Pryxa4 спасибо
@@Pryxa4 Господи, спасибо огромнейшее, успел задолбаться пока выяснял почему это происходит.
Спасибо, хорошее преподавание!
Автор: "чтобы автоматически вывести новую строку, есть специальная команда"
Я: "endl , или
!"
Автор: " println "
Я : " непонял......"
- это символ, а не команда
смотрю второй видос, ардуино для новичка! Если с первым зашло то со второго урока вообще не понятно. Буду больше изучать.
5:40 у меня этот код после каждого ввода добавляет строчку "-38"
у меня тоже
Как исправил?
@@raufgimadeyev , В окне COM-порта внизу справа выбери в выпадающем списке "Нет конца строки"
@@ВикторВикторович-ч1щ спасибо большое)
@@ВикторВикторович-ч1щ Час сидел бился над этой хренью, пока не залез в каменты. Спасибо.
Спасибо за видео и советы
Спасибо, а то намучился с отправкой данных. А как отправить массив с данными? Только парсингом вытаскивать данные?
Спасибо за классный видос. Лайк!
Подскажите пожалуйста, я сделал это "эхо", но каждый раз после вывода числа выводится 0 с новой строки
такая же проблема, сразу сбрасывает значение переменной до нуля
Отлично. ТО, что надо.
когда сначала написал скетч передачи в формате JSON, а потом решил посмотреть уроки чтобы разобраться )))
Все хорошо! Но, в дополнение хочу сказать что скорость инициализации порта должна соответствовать скорости монитора порта, иначе в мониторе будут крокозябры.
+Alexei Belousov кстати да, допишу в шпаргалку. Спасибо!
Год прошел, но все-таки спрошу. Что делать если после ввода числа в буфер через серию команд "Эхо":
if (Serial.available() > 0) {
int val = Serial.parseInt();
Serial.println(val);
}
В буфере порта вместе со значением заданной переменной val, которую я ввел, появляется еще и число 0. Вне зависимости от от моего числа далее идет число 0. Это работает и с условными операторами, таже проблема. На сколько я понимаю в будущем при построении сложных программ, это может мешать. Заранее спасибо за ответ.
Такая же фигня, дайте ответ пожалуйста!
Нашёл ниже: "В мониторе порта нужно выбрать вместо "Новая Строка " -"Нет конца строки""
@@ВсесамоеинтересноеО_о Спасибо огромное!
с нулём баг исправил и какой-то непонятный баг. Не выводит первую цифру а если ввожу например 1 то вывожит 0
Понял в чём баг. Вместо Serial.available заюзал Serial.read
На счет Serial.parseint () можно убрать эту задержку при помощи Serial.Timeout (2) в setup()😊
а можешь подробнее друг рассказать об этом
благодарю за приятную музыку на фоне, а не какой-нибудь манальный deephouse.
Спасибо!
хотел бы заметить, надо обращать внимание на тип данных которые вводим в буфер. если хотите вывести число 123456 используя тип int - то не получите 123456, а получите -7616 потому для такого числа надо использовать тип long. при вводе в буфер числа 32768 с типом int - получится результат -32768.
Об этом было в предыдущем уроке
Хотел было ссылку добавить на предыдущий урок)))
Очищение пригодится если мы хотим получать значение с физ кнопок а в порт выводить картинку "игры"
Отлично,спасибо!
всем привет! если тут есть те кто хотят начать знакомиться с языком и изучать электронику вместе, то пишите
очень заинтересовала эта тема, хотя сам работаю с другими языками
у кого есть желание, можем списаться)
Видимо я рукожоп.. Alex, я всё делал как ты показывал на видео. Но вместо "HELLO, WORLD!", СОМ порт выводил вообще лютую дичь, типо такой : ЂxxxшxшxшxшxЂшxxшxЂxшxЂx. Пожалуйста помогите моему рукожопству) и видосы у тебя всегда годные Alex)
важно для свази двух ардуинок по rx-tx
3:06. Так ведь можно тогда сделать автономный калькулятор сист. счисления на ардуино, просто докупить отдельный дисплей и прицепить штук 10 кнопок. Главное чтоб пинов хватило. Хотя это очень грубый,конечно, получится калькулятор. И в школке на уроке информатики на к\р быстро переводить числа из одной системы в другую.
мне 12 и всё понятно ,супер
Вряд ли буду когда нибудь ардуинить, смотрю твои видосы просто потому что она ахуенные ^___^
@ssch ебать ты стремный тип тебе наверное сейчас стыдно за себя прошлого
@@isakneuman9995 как то ты не в тему, или не въехал?
Могу повторить то же. Повторить?
@@TheWladberlin я хз что имел ввиду в тот момент, но я был прав.
@@isakneuman9995 Не здаешься, борешься до конца :)))
Здравствуйте, я когда пишу скорость бит в сек, там совпадает с монитором, 9600, но показывает иероглифы, заметьте пожалуйста.
parseInt для чисел а что нужно вписать для слов
У меня по последней части кода с in_data после нажатия Enter в монитор сначала прилетает 0, потом мое число... код один в один, плата wemos d1 mini. Откуда 0 вылез?
И в следующем уроке схожая фигня... Ввожу 1 или 5 , монитор выводит "Вы ввели 1 или 5!" и сразу следующая строка "Мимо!" , ввожу что то другое, монитор выводит "Мимо!" и сразу следующей строкой еще раз "Мимо!"...
Привет. В IDE версии 2.0.3 монитор не выводится в отдельном окне, а появляется вместо окна ввода. Можно это как то изменить?
Так же весь русский язык отображается знаками вопроса. (Не критично, но можно как то исправить?)
И самое главное, весь текст прописывается в одной строке без отступов. Очень сложно воспринимать такое.
Функции:
Нет конца строки
Новая строка
CR Возврат каретки
NL & CR
Не дают совсем никакого эффекта.
Настройки монитора также найти не смог.
Может кто то помочь?
ты супер!
void setup() {
Serial.begin(9600);
Serial.print("hello");
}
Ошибка открытия последовательного порта "COM4" (Port busy)
не могу понять в чём проблема?
Чесно говоря я за 3серии ничего не понял! И СПАСИБО ЗА ЭТИ УРОКИ надеюсь все пойму через время!
Для 1с-ника всё понятно)
Описание методов у Serial www.arduino.cc/reference/en/language/functions/communication/serial/
например readString и readStringUntil('
')
в уроке 1, ты забыл упомянуть, названный тут, тип данных - String
У меня какие-то проблемы. Когда я ввожу число через Serial.read() - '0', у меня выводит -38. Так на всех числах, кроме 7, на нем, почему-то, выводит -7. Все списал, как у вас и цифры вводил те же. Потом когда я ввожу через Serial.parseInt(), у меня сначала выводит то, что надо, но потом я беру какое-нибудь число большое, например 198765, и выводит непонятно что. То вывело минусовое число, то число на 10000 больше, не понимаю. Помогите, пожалуйста. У меня Ардуино Уно, заказывал набор целый. Только бы не была сломана(
У меня при чтении чисел через Serial.read() - '0', сначала выводи число которое я ввел а потом -38, это я так понимаю выводит команду enter( кнопка "отправить" COM порта ардуины) , которую необходимо нажать после ввода числа. А при Serial.parseInt() выводит непонятно что, когда ты выходишь за диапазон значений переменных типа int , который лежит от -32768 до 32767 в первом уроке он рассказывал.
В мониторе порта нужно выбрать вместо "Новая Строка " -"Нет конца строки"
спасибо помогло
сделай пожалуйcта урок про подключение Mp3 плеера к ардуино!
4:36 практичнее будет использовать String, потому что пользователь может ведь не только числа написать
Разобрался, спасибо
Гавер, у меня вместо русских букв выходят квадратики на компорте. Помоги плиз
У Вас есть видео как передавать данные видеоизображения камеры (через радиоканал 2Ггц), к примеру с квадрокоптера, на пульт снабженный дисплеем nexton? Если такого нет, то запишите такое видео. Будет очень интересно узнать способы реализации такого проекта.
доброго времени суток есть ряд проблем от одной избавиля, это после вода цифр в строчку вдругой сто
роке появляется* 0 * путём ()>1); а вот при введении 6 и более чисел происходит какоето вычетание и пишет со знаком -- другое число
Всем здравия! Почему у меня при вводе Serial.println ("Русский текст"); - выводятся спец символы? серый ромбик со знаком вопроса внутри. Программа и сохранения специально установлены без кириллических символов в пути сохранения. С Serial.println ("English text"); проблем нет.
4:51 функция Serial.read принимает один байт, а уже в какой тип его нужно перевести остаётся на усмотрение ардуинщика.
Здравствуй!!! Подскажи почему в порт выводятся в место русских букв эроглифы какие то!!!?
может быть это из-за разницы кодировок
5:47 на 555 стало приходить. Всегда добавляется это "-38"
5
5
5
-38
Алекс благодарю, но у меня проблема в void setup() работает только Serial.begin(9600); Serial.print("qwerty"); не выполняется, void loop(); работает мой скетч:
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.print("QWERTY");
}
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available() > 0) {
int in_data = Serial.parseInt();
Serial.println(in_data);
}
}
только после возврата числа следующей строчкой отправляется 0, интересно почему так
А я не понял, что за com порт. Вроде бы это юсб, но в интернете компорт выглядит совсем по другому. Может еще разберусь. Только начал изучение.
Спасибо вам за Ваше творчество, все понятно и доступно даже для новичков (такого как я) .
Можно ли где-то задать Вам простенький вопрос с приложением простенького скетча ? кое что не понятно
Здадите мне) наверно справлючь
и во вторых алекс работает за деньги можно заказать код у него
Можно ли выводить в через монитор порта таблицу ascii?
У меня parseInt добавляет 0 следующей строкой - ввожу 44, а выводит 44, потом 0.
Исправил следующим образом "if (Serial.available() > 1)"
спасибо, помогло!
Спасибо
А есть под Оренбургом фонтанчик с черным дельфином
И в жизни видеть лишь раз его доводилось
Всем тем, кто проходили его мимо
Фонтанчик с черным дельфином
Здравствуйте, на днях пробовал данный код и у меня не получилось( с типом char все понятно а вот с типом int порт выдает неправельные цифры). Ошибка заключалось в следующем: когда я вводил цифру 5 порт мне выдавал 53 и 10 когда я вводил 35 порт мне выдавал 51 53 и 10. НЕ МОГУ ПОНЯТЬ ОТКУДА ПОСТОЯННО БИРЕТСЯ ЧИСЛО 10!!!
Знатоки, подскажите как писать на ASM для Arduino?
Т.е. если у меня программа на питоне отправляет цифры и Ардуино выполняет их не более 8 раз и питоновская прога зависает, значит буфер переполнен?
Пробовал делать на NODEmcu v3.
Не работает. Но все просто, надо прописать библиотеку.
#include
Объясните зачем это окно вывода инфы через ком порт может пригодиться? Только чтобы результаты измерений с датчика показывать?
В среде Arduino применяется обработка данных по прерыванию ? Например, когда для выбранной платы есть аппаратная поддержка какого-то протокола (SPI, UART, Ethernet и т. д.), используется режим ожидания приёма (Salve) и приходит пакет, можно ли вызвать программное прерывание и читать приёмный буфер только тогда, когда в нём что-то есть ?