Как проверить подключен сейчас терминал или нет в программе
- Войдите на сайт для отправки комментариев
Пнд, 18/01/2021 - 15:26
Здравствуйте!
плата Arduino Pro Micro
При первом запуске, пока терминал еще ни разу не открывал, все работает. Открываю терминал все работает и сообщения выводятся. Закрываю терминал и все тормозит. Открываю терминал снова - все нормально.
Конструкция:
void loop() {
if (Serial) {
FlagTerminalConnected = true;
} else {
FlagTerminalConnected = false;
}
.....
}
нормально работает только до первого открытия терминала..., потом, даже когда терминал уже закрыт, программа считает Serial - true, и, видимо, пытается туда что-то отослать, лампочки Rx и Tx не моргают. (В программе использую millis() - если это сюда относится)
Программа не должна тормозить из-за отправки чего-либо в Serial. По крайней мере разницы между отправкой в реальный Термниал и "в пустоту" быть не должно. Почему у Вас тормозит (и тормозит ли вообще) не знает никто, кроме Вас, т.к. никто Вашей программы не видел.
vlport, на примере stm32 (у негго, как и у Micro аппаратный USB) Serial вполне адекватно возвращает состояние подключения.
Я для проверки использовал скетч, который меняет частоту мигания светодиода в зависимости от наличия подключения.
Уважаемый andriano!
Благодарю Вас за помощь. У меня одна единственная плата Ардуино ПРО МИКРО 5 вольт (LED_BUILTIN - нет, поэтому внешний LED на pin 9).
Моя проблема возникает на третьем шаге:
1 шаг: Заливаем программу, терминал не запущен - диод на 9 - pin очень быстро моргает - ПРАВИЛЬНО. if (!Serial) LED_interval = 0; else LED_interval = 5000; - работает.
2 шаг: Запускаем терминал - диод на 9 - pin моргает с интервалом 5 секунды - ПРАВИЛЬНО. if (!Serial) LED_interval = 0; else LED_interval = 5000; ОТРАБОТАЛ. в терминал выводится 'c' и Тх - моргает.
3 шаг: Закрываем терминал - Tx - НЕ МОРГАЕТ - видимо, плата понимает, что терминала нет, но if (!Serial) НЕ РАБОТАЕТ - диод на 9 - pin моргать с интервалом около 6 секунд! Откуда 6 и почему моргает с интервалом? - ЗАСАДА!
4 шаг: Снова запускаем терминал - диод на 9 - pin моргает с интервалом 5 секунды - ПРАВИЛЬНО...
Таким образом if (!Serial) работает только ОДИН РАЗ...
Изменяю }else{ (в начало добавил char serialData;).... "StopSerial" - печатает, но Serial.end(); - НЕ ВЫПОЛНЯЕТСЯ... Видимо архитектура моей платы Ардуино ПРО МИКРО (типа Леонардо) не дружит с библиотекой Serial
Да, на микре я такое наблюдал: открыт терминал - нет тормозов, закрыт - есть. Не разбирался, но сталкивался. Поди там из-за эмуляции ком-порта такие приключения.
Да и Serial.begin(9600); моей плате вообще не нужен...
Вот некоторые раскопки.
https://forum.arduino.cc/index.php?topic=502792.0
Похоже, если моей ПРО МИКРО один раз показали Serial, то он его все время ищет (даже если он ему и не нужен - ничего не выводим и не вводим) - ДОЛЖОН БЫТЬ!
Господа! Подскажите, пожалуйста, а на NANO V3.0 ATMEGA328P c микро USB эта программа ( if (Serial) { ) работает корректно?
На ATMega328 проблем с терминалом я не наблюдал ни разу.
На Nano нет аппаратного USB, соответственно Serial никак не отслеживает подключение и всегда возвращает true.
У меня "Pro Micro ATmega32U4 5V 16 МГц заменить ATmega328 для Arduino Pro Mini с 2 Row штыревые для Leonardo Mini Usb Интерфейс"... - почти ATmega328..., но на плате ПРО МИКРО... типа Леонардо.
Уважаемый andriano!
Вроде-как есть с mini usb... Но как выбрать процессор 328P-AU - 213 руб. или 328 P-MU - 259 руб. - чуть дороже и микросхем побольше...
ззhttps://aliexpress.ru/item/4001245541979.html?spm=a2g0o.productlist.0.0.39a01dd7ZPn8GG&s=p&ad_pvid=202101181111554898398729869440000340075_3&algo_pvid=c497e2d4-109f-49d9-b1a9-baaacd4c8aaf&algo_expid=c497e2d4-109f-49d9-b1a9-baaacd4c8aaf-2&btsid=0b8b034516109971156303583e522a&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_&sku_id=10000015445386155
Уважаемые Господа!
Благодарю Вас за сотрудничество. Благодаря Вам, ко мне вернулось душевное равновесие, а ноут и Ардуинка остались целыми......, еще пока. Позже выложу маленькую функцию для отладки программы для новичков, может кому пригодится...