Управление через Qt

Anvis
Offline
Зарегистрирован: 06.09.2020

Здравствуйте! Помогите пожалуйста преодолеть порог вхождения.

Хочу написать приложение с графическим интерфейсом, управляющее не только Ардуиной, но и параллельно другими приборами через другие библиотеки. Соответственно, родная среда разработки не подходит. Пользоваться собираюсь C++ Qt через класс QextSerialPort. От Ардуины нужно всего лишь управлять герконами, подавая 0/5 В через цифровой порт.

Насколько понял, после подключения COM-порта отправление и считывание команд осуществляется методами QIODevice::read(qint64) и QIODevice::write(const QByteArray &). Ну и, собственно, сам вопрос: Что отправлять-то? Понятное дело, в родной среде есть простые и удобные функции, а вот чем заполнять этот мой QByteArray - не понимаю и нигде не могу найти. Например, каким набором байтов мне включить цифровой вывод N в режим OUTPUT, а затем установить на нем уровень HIGH?

Заранее извиняюсь, если ответ очевиден. Скорее всего я слишком привык к SCPI-командам или плохо представляю, как работать с COM-портом. 

rkit
Offline
Зарегистрирован: 23.11.2016

Anvis пишет:

Соответственно, родная среда разработки не подходит.

Соответственно чему?

 

Anvis пишет:

От Ардуины нужно всего лишь управлять герконами, подавая 0/5 В через цифровой порт.

Геркон это пассивный элемент, не требующий управления.

 

Anvis пишет:

Понятное дело, в родной среде есть простые и удобные функции

Что? Что ты вообще имеешь в виду под "родной средой"?

Anvis
Offline
Зарегистрирован: 06.09.2020

rkit пишет:
Соответственно чему?

Моим требованиям. Мне не удобен формат скетча, требуется графический интерфейс, экзешник, подключение библиотек, написанных под Qt... в конце концов Qt Creator мощнее в плане написания кода и я к нему привык. 

rkit пишет:
Геркон это пассивный элемент, не требующий управления.

Замыкать/размыкать герконовое реле.

rkit пишет:
Что? Что ты вообще имеешь в виду под "родной средой"?

Arduino IDE.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Anvis пишет:

Arduino IDE.

Можно поинтересоваться, какое отношение имеет Ардуино ИДЕ к разработке графического интерфейса для компьютера?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Anvis пишет:
Например, каким набором байтов мне включить цифровой вывод N в режим OUTPUT, а затем установить на нем уровень HIGH?

Никаким! ;))

Я понял, что ты не понимаешь. ;)))

Ардуино - голый контроллер. Ты для него можешь написать программу, которая так или иначе будет интерпретировать "набор байт", принимаемый через UART.

Еще раз: сам пишешь, как будет реагировать Ардуина и на что. Сам придумываешь и сам реализуешь.

rkit
Offline
Зарегистрирован: 23.11.2016

Anvis пишет:

Моим требованиям. Мне не удобен формат скетча, требуется графический интерфейс, экзешник, подключение библиотек, написанных под Qt... в конце концов Qt Creator мощнее в плане написания кода и я к нему привык. 

Так Qt Creator и есть родная среда для qt приложений.

 

Anvis пишет:

Arduino IDE.

В Arduino IDE.нет никаких простых и понятных функций для работы с arduino из qt приложения. Да и вообще никаких нету.

 

Может ты хоть самый простой пример мигания светодиодом на ардуино посмотришь, прежде чем нести какую-то чушь тут?

Anvis
Offline
Зарегистрирован: 06.09.2020

wdrakula пишет:
Я понял, что ты не понимаешь. ;)))

Похоже, что так) Контроллеры не программировал, но сейчас погуглю. Посоветуйте, от чего оттолкнуться? В общем-то в конечном счете мне и нужна функция, аналогичная той, что используется в скетчах.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Anvis пишет:

Посоветуйте, от чего оттолкнуться?

Начните хотя бы с ЭТОГО.

Anvis
Offline
Зарегистрирован: 06.09.2020

wdrakula пишет:

Anvis пишет:
Например, каким набором байтов мне включить цифровой вывод N в режим OUTPUT, а затем установить на нем уровень HIGH?

Никаким! ;))

Я понял, что ты не понимаешь. ;)))

Ардуино - голый контроллер. Ты для него можешь написать программу, которая так или иначе будет интерпретировать "набор байт", принимаемый через UART.

Еще раз: сам пишешь, как будет реагировать Ардуина и на что. Сам придумываешь и сам реализуешь.

Хм, в общем-то да, если внезапно посмотреть на Arduino-микроконтроллер как, собственно, на микроконтроллер, а Arduino IDE как на высокоуровневую среду его программирования и ничего более - тогда все вроде становится на свои места, и сама Arduino IDE оказывается действительно в тему, а Qt - вроде как и нет) Спасибо!

Просто с контроллерами не работал и изначально думал, что Arduino IDE обязывает меня работать только в этой среде и запускать ее каждый раз при выполнении программы, а плату Arduino как какой-нибудь измерительный прибор.

Выходит, в Arduino IDE мне в loop() нужно написать постоянную проверку вывода на наличие команды, а затем на Qt или где еще - драйвер с этой командой? Могу ли я использовать USB-B для приема этих команд? Впрочем, это я и сам, думаю, нагуглю.

Izvekoff
Offline
Зарегистрирован: 02.03.2020

В роликах Дмитрия Осипова есть как со смартфона управлять ардуиной

nevkon
Offline
Зарегистрирован: 20.01.2015

Мой совет. Начните с классики - блинка (т.е. поморгать светодиодом).

http://arduino.ru/Guide/Windows

Ну и после этого можно просто подключить ардуину к любой телефонной зарядке и она будет все также моргать светодиодом.

Anvis
Offline
Зарегистрирован: 06.09.2020

nevkon пишет:
Мой совет. Начните с классики - блинка (т.е. поморгать светодиодом).

http://arduino.ru/Guide/Windows

Ну и после этого можно просто подключить ардуину к любой телефонной зарядке и она будет все также моргать светодиодом.

Спасибо) Да разобрался уже, суть проблемы была именно в том, о чем написал wdrakula. Вчера не получилось подключить через библиотеку QextSerialPort, но потом обнаружил, что с версии 5.1 Qt есть встроенный класс QtSerialPort, и он отработал как положено.

Единственное, не пойму теперь вот что. У меня Ardino Mega 2560 R3, при работе USB всегда будет подключен, так как основная работа будет происходить на компьютере. Пины "RX0" и "TX1" у меня под напряжением - это какое-то дублирование USB порта? Аналогично я могу распаять пины 14-19 еще на три USB? И не произойдет ли аварии, если 52 цифровых пина у меня будут одновременно работать при токе 36 мА? Ничего не перегрею? Скорее всего так делать не придется, но все же интересно.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Всё сгорит. Давай ты даташит на контроллер прочитаешь. Ты по аглицки читаешь ведь? Я надеюсь!

nevkon
Offline
Зарегистрирован: 20.01.2015

RX0 и TX0 через микросхему подключены к USB. Микросхема эта может быть CH340 (или подобная) на китайских ардуинах, а может быть еще один МК как на оригинальной так и на китайской. Функцию микросхема выполняет одну - преобразует сигнал с USB в UART и наоборот. Без крайней необходимости эти 2 пина лучше не использовать, а если все время будет подключение по USB, то рекомендую забыть что они есть на плате, только в программе где они будут выполнять работу Serial.

ps. Даташит не даташит, а вот спеки на ардуину лучше прочитать что она умеет: http://arduino.ru/Hardware/ArduinoBoardMega2560

Anvis
Offline
Зарегистрирован: 06.09.2020

"Каждый из 54 цифровых выводов Mega (...) может настраиваться как вход или выход. Выводы работают при напряжении 5 В. Каждый вывод (...) может пропускать до 40 мА."

Вот я это и прочитал. А потом даташит прочитал, но с наскока ничего не нашел (не понял). Выходит, можно? На самом деле никто так извращаться над портом не собирается, но все же интересно, какой суммарный ток выдерживает эта казявка, да еще и с наработкой 20 лет при 85 °С))

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Anvis пишет:

"Каждый из 54 цифровых выводов Mega (...) может настраиваться как вход или выход. Выводы работают при напряжении 5 В. Каждый вывод (...) может пропускать до 40 мА."

Вот я это и прочитал. А потом даташит прочитал, но с наскока ничего не нашел (не понял). Выходит, можно? На самом деле никто так извращаться над портом не собирается, но все же интересно, какой суммарный ток выдерживает эта казявка, да еще и с наработкой 20 лет при 85 °С))

Да, 40мА на порт, но общее потребление (порты + сам контроллер) не должно быть больше 200мА

 

В даташите надо смтореть Аbsolute Maximum Ratings