Почему запуск последовательного монитора перезапускает скетч?
Если я загружаю какой-либо скетч, который отправляет последовательные данные, я сразу же вижу, как мигают светодиоды TX/RX после загрузки скетча. Если затем я запущу последовательный монитор, скетч перезапустится.
Минимальный скетч, показывающий такое поведение:
void setup()
{
Serial.begin(9600);
Serial.println("Setup");
}
void loop()
{
Serial.println("Loop");
delay(1000);
}
Протестировано с несколькими платами и версиями IDE для Mac и Windows.
Пример вывода - он возвращается к "Настройке", когда я открываю последовательный монитор:
Почему это так?
@Cybergibbons, 👍44
Обсуждение4 ответа
Лучший ответ:
Arduino использует сигналы RTS (Запрос на отправку) (и, я думаю, DTR (Терминал передачи данных готов)) для автоматического сброса. Если у вас есть последовательный терминал, который позволяет изменять настройки управления потоком, вы можете изменить эту функциональность.
Терминал Arduino не предоставляет вам много возможностей, и это по умолчанию. Другие позволят вам настроить гораздо больше. Установка параметра "Управление потоком" на " нет " позволит вам подключаться/отключаться от последовательного порта без сброса платы. это весьма полезно для отладки, когда вы хотите иметь возможность просто подключить разъем и просмотреть вывод без необходимости начинать скетч заново.
Другой способ отключить автоматический сброс - это надеть подтягивающий резистор на вывод сброса.
Отключение Автоматического Сброса При Последовательном Подключении
Arduino Unos может быть исправлен с помощью конденсатора емкостью 10 мкФ через сброс и GND. Он работает для одной установки, для которой я его использовал до сих пор …, @scruss
Я попробовал использовать [замазку](http://en.wikipedia.org/wiki/PuTTY), подключение к COM-порту, на котором отображается Arduino (в моем случае COM16). Он по-прежнему сбрасывает Arduino, если для параметра "Управление потоком" в соединении/последовательном установлено значение "Нет" (другими параметрами являются "XON/XOFF", "RTS/CTS" и "DSR/DTR"). Я использовал версию 0.60 шпатлевки., @Peter Mortensen
-продолжение: Это было опробовано на Arduino Uno R3., @Peter Mortensen
У Duemilanove и Uno есть трассировка с надписью "СБРОС EN", которая управляет этим поведением. Сотрите эту трассировку, чтобы отключить автоматический сброс. Припаяйте провод через прокладки, чтобы снова включить его., @mhopeng
Истина всегда содержится в таблицах данных, схемах и коде:
Arduino UNO фактически использует линию /DTR
для запуска сброса, как вы можете видеть на следующей таблице:
Ссылка на ваше схематическое изображение разорвана., @linhartr22
Спасибо, я все исправил! Я на самом деле думал, что так было с кэшированием изображений, но, похоже, это не так, поэтому я обязательно сохраню его всегда включенным., @zmo
готово, спасибо за подсказку (на самом деле у меня был свой собственный сайт на 10 дней, потому что я выполнял некоторые ремонтные работы, которые были временными), @zmo
Да, но что на самом деле происходит? Связано ли это с тем, как запрограммирован ATmega16U2 (утверждение низкого уровня PD7 при открытии COM-порта программой?)? Или следуя какому-то стандарту DTR?). И в чем смысл C5? - будет ли он сбрасывать основной процессор для обоих переходов (от низкого к высокому и от высокого к низкому)? Какова приблизительная длительность импульса (в микросекундах) на выводе сброса основного процессора и как он выглядит?, @Peter Mortensen
Хорошо, я записал импульс при сбросе при последовательном подключении: [https://i.stack.imgur.com/KV4Oa.png](https://i.stack.imgur.com/KV4Oa.png). Вы можете использовать его в своем ответе., @Peter Mortensen
Как это можно назвать ответом? Что мы предполагаем делать с этой информацией????, @GeneCode
эй, ребята, это значит, что я должен перерезать этот провод?, @GeneCode
если это то, чего ты хочешь, да :), @zmo
Что может сделать RESET-EN? Почему он там? Похоже, что это не может иметь никакого эффекта (похоже, короткое замыкание). Или это ошибка в схеме? Каково же объяснение? Можете ли вы подробнее изложить свой ответ (этот и другие моменты)?, @Peter Mortensen
На самом деле он ничего не делает, как вы можете видеть из схем. Причина, по которой это происходит, заключается в том, что вы можете обрезать линию DTR между ножками RESET-EN, чтобы отключить автоматический сброс, и если вы хотите снова включить ее, то вы можете спаять вместе две прокладки RESET-EN., @zmo
Это устраняет проблему
import os
import sys
import termios
import fcntl
self.fd = sys.stdin.fileno()
# Прекратить сброс ардуино при последовательном подключении
self.newattr = termios.tcgetattr(self.fd)
self.newattr[2] = self.newattr[2] & ~termios.HUPCL
termios.tcsetattr(self.fd, termios.TCSANOW, self.newattr)
Пожалуйста, объясните, почему это устраняет проблему., @Quazi Irfan
Arduino использует линию DTR (терминал передачи данных готов)
Таким образом, с помощью последовательного монитора Arduino невозможно изменить перезапуск при установке соединения rs232.
Но я использую, например, бесплатную программу "HTerm" (под Windows). По умолчанию он не использует сигнал DTR. Тем временем я перешел на бесплатный "CoolTerm" (немного более удобный...): вы должны отключить "DTR Выключен" в разделе "Параметры подключения". В Linux я использую "moserial". В разделе "Настройка портов" вы должны отключить "рукопожатие" ;-)
Этот способ более удобен для меня, чем регулировка контакта СБРОСА. Кроме того, это хорошее преимущество, позволяющее сохранить все данные в файле журнала для последующего анализа…
- Float печатается только 2 десятичных знака после запятой
- Чтение из Serial
- Связь последовательного порта Digispark
- Как получить правильный последовательный порт?
- Arduino IDE «Инструменты> Последовательный порт» неактивен (Ubuntu)
- Как установить последовательные драйверы FTDI на Mac?
- как отправить данные в Adafruit Bluefruit Feather (32u4) через Bluetooth?
- NodeMCU второй HARDWARE последовательный TX в качестве порта отладки
Я никогда не видел скетча, в котором используется серийный номер, не делающий этого, так что буквально любой скетч., @Cybergibbons
Связанные: *Сброс последовательного порта Arduino в последовательном мониторе и Python*, @Peter Mortensen
Дубликат: *[Почему мой Arduino, кажется, перезагружается каждый раз, когда я открываю последовательный монитор?](http://arduinoprosto.ru/q/4078)*, @Peter Mortensen
У меня есть отдельная проблема. Arduino leostick (и другие) больше не выполняют автоматическую настройку. Как мне его изменить?, @CMCDragonkai
Странный. Я не думаю, что это происходит с platformio или Arduino IDE на моем ноутбуке Linux, но я только что заметил это с pio в Windows. Это ужасная "особенность"., @Eric Duminil