0 / 0 / 0
Регистрация: 12.06.2018
Сообщений: 8
|
|||||||||||
1 | |||||||||||
C++ отправка команд на ардуино через com порт посредством библиотеки windows.h14.04.2019, 22:08. Просмотров 3317. Ответов 32
Метки нет Все метки)
(
Добрый день!
Возникла проблема, с которой сам разобраться не могу. Хотел сделать консольное приложение на c++, которое бы отправляло какой-то текст через com-порт на ардуино. Погуглил данную тему и узнал, что это можно сделать используя библиотеку windows.h. Для теста придумал себе такую задачу: нужно отправить какой угодно текст в com-порт, а ардуино, получив его, должна включить 13 пин и не выключать больше. Вот код для ПК на C++;
![]() А вот код для ардуино.
Проблема такая: когда запускаю отправку с ПК, только что после того, как загрузил прошивку в ардуину, все работает (светодиод загорается и не гаснет), но когда это делаешь повторно и даже после того, как переподключишь, ардуину к com-порту, светодиод загорается на какое-то мгновение, а затем гаснет. Сначала я думал, что это из за того, что программа на c++ завершается и ардуино, как-бы перезапускается, попробовал поставить точку останова перед командой закрытия порта и return 0, и запустить код в отладчике, но это не помогло, результат остался тем же. Прощу помощи у вас, буду благодарен за любые предположения. Если нужно больше информации, пишите. Добавлено через 12 минут Причем мигает он тогда не по причине того, что я отправляю данные в com-порт, это обычное моргание светодиода на плате при подключении ардуины к компу / перезапуске скетча.
0
|
|
14.04.2019, 22:08 | |
Отправка SMS посредством АТ команд через мобильник Можно ли через ардуино по USB посредством кнопки или сенсора включить или выключить монитор компютера? Отправка команд на сервер через браузер |
|
0 / 0 / 0
Регистрация: 12.06.2018
Сообщений: 8
|
||||||
15.04.2019, 14:04 [ТС] | 3 | |||||
ОШИБКУ Я НАШЕЛ!!! Оказывается данные в ком порт надо было слать с некоторой задержкой и тогда всё работает.
То есть когда я запускал код на c++, запускался скетч на ардуино и в это же время с++ слал данные в порт. Не знаю точно, что происходит в "мозгах" ардуины когда ее включают, возможно она просто не успела обработать блок setup(), когда я уже отправил ей данные. Если кто-то может точно объяснить, что произошло, и почему временная задержка помогла, буду благодарен, если напишите. ![]()
![]() ![]()
0
|
0 / 0 / 0
Регистрация: 12.06.2018
Сообщений: 8
|
|
15.04.2019, 14:41 [ТС] | 5 |
А что это тогда? Как только я это исправил, Светодиод стал загораться и пин RX ардуин стал мигать, то есть данные приходят теперь.
0
|
0 / 0 / 0
Регистрация: 12.06.2018
Сообщений: 8
|
|
15.04.2019, 14:53 [ТС] | 7 |
Ну напишите, тогда, что я сказал не так, раз понимаете. Я только недавно этот вопрос начал изучать, многое не понимаю.
0
|
15.04.2019, 15:29 | 8 |
![]() Решение
При включении питания или сбросе, перед выполнением кода некоторое время работает загрузчик. Если сразу отправить команду ее примет загрузчик, а не ваш код.
Другая причина в том что используется вывод DTR COM порта для сброса МК и при выполнении CreateFile на этом выводе может установится логический уровень, приводящий к перезагрузке. Это не раз было замечено на практике.
1
|
0 / 0 / 0
Регистрация: 12.06.2018
Сообщений: 8
|
|
15.04.2019, 15:37 [ТС] | 9 |
0
|
![]() |
|
15.04.2019, 15:48 | 10 |
Это зависит от того как настроишь ком порт имею ввиду в коде С++ c WinApi.
Добавлено через 56 секунд Ваш гавнокод не достоит того что бы на него смотреть. Учите С++ разбирайтесь с WinApi тогда можно будет о чем то говорить.
0
|
15.04.2019, 16:41 | 11 |
Все не так просто. Уровень на DTR будет изменен при выполнении CreateFile. Изменить его состояние можно функцией SetCommState или EscapeCommFunction, но им нужен дескриптор порта, т. е. без CreateFile не обойтись, но ее выполнение может изменить уровень на DTR и МК перезагрузится.
0
|
324 / 266 / 136
Регистрация: 08.04.2013
Сообщений: 1,151
|
|
15.04.2019, 20:21 | 13 |
Astronomax, Думаю для работы с сом портом вам для начала подойдет этот проект для MSVStudio С++ 2008 или 2010, нашел где то в сети.
0
|
![]() |
|
15.04.2019, 22:54 | 14 |
Да в сети куча разнова хлама, я бы не советовал, лучше сразу брать Qt.
Добавлено через 2 минуты Не по теме: Я кстати тоже велосипеды строил https://github.com/Avazart/Bic... Win/Serial
0
|
16.04.2019, 15:11 | 15 | |||||
Жирные проги получаются и GUI нестандартный (отличается от текущей темы ОС). На мой взгляд для простых программ не самый подходящий.
Не по теме: Если не ограничиваться плюсами, задачу можно решить гораздо проще. Аналог кода из первого сообщения.
0
|
![]() |
|
16.04.2019, 15:31 | 16 |
В смысле жирные?
И чем это GUI нестандартный? Вполне нормальны GUI даже лучше стандартного. Да и в чем суть? Суть в связи GUI + SerialPort + потоки. А если это не надо, то для "простых" лучше - Python. Не по теме: А PureBasic это # отстой.
0
|
16.04.2019, 15:51 | 17 |
Проги с рантаймом верят несколько десятков метров. В винде по умолчанию рантайма для Qt нет.
Нестандартный в том смысле что отличается от текущей темы ОС. Выглядит по другому. Я об этом написал. Что лучше зависит от задачи. В случае питона придется ставить интерпретатор, т. к. компилятора нет.
0
|
![]() |
|
16.04.2019, 16:03 | 18 |
Что в наше время пара десятка метров?
Добавлено через 1 минуту Я бы не сказал что прям сильно отличается. Что Вам не нравится? Добавлено через 2 минуты Правильно путь - да ставить интерпретатор. Компилятора нет, но есть сборщики/упаковщики. Добавлено через 46 секунд Можно писать на любом ЯП. Это да. Но стоит писать на "любом"? Стоит писать на том что удобно и нормально.
0
|
locm
|
16.04.2019, 16:14
#19
|
Не по теме: Для простой проги это много. Дело не в том нравится или нет. Выглядит как "белая ворона" по сравнению с остальными программами, у которых GUI соответствует теме ОС. Чем код выше не понравился? Он сложный? Его написать проще и быстрее чем код в первом сообщении и вдобавок он кроссплатформенный. Единственное что на разных платформах имя COM порта будет отличаться.
0
|
![]() |
|
16.04.2019, 16:24 | 20 |
Я не думаю что это много для программы с нормальным GUI. Я уже не говорю о кроссплатформенности.
Добавлено через 1 минуту Выглядит как стандартная тема. По крайней мере по Win7 при стандартной теме я не вижу отличий. Добавлено через 59 секунд Кроме того что это бейсик?
0
|
16.04.2019, 16:24 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. Отправка команд через Steam API Отправка данных через COM-порт Отправка запроса на прибор через сом-порт Отправка СМС через COM порт на веб сервере Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |