なぜシリアルモニターを起動するとスケッチが再開されるのですか?


31

シリアルデータを送信するスケッチをアップロードすると、スケッチがアップロードされるとすぐにTX / RX LEDが点滅します。その後、シリアルモニターを起動すると、スケッチが再起動するように見えます。

この動作を示す最低限のスケッチ:

void setup()
{
    Serial.begin(9600);
    Serial.println("Setup");
}

void loop()
{
  Serial.println("Loop");
  delay(1000);
}

複数のボードと、MacおよびWindowsバージョンのIDEでテスト済み。

出力例-シリアルモニターを開くと、「セットアップ」に戻ります。

再起動

どうしてこれなの?


5
シリアルを使用するスケッチではこれを行わないので、文字通りスケッチは見たことがありません。
サイバーギボン14



別の問題があります。Arduinoレオスティック(およびその他)はもう自動リセットされません。どうすればレンタルできますか?
CMCDragonkai

回答:


33

Arduinoは、RTS(Request To Send)(およびDTR(Data Terminal Ready)と思われる)信号を使用して自動リセットします。フロー制御設定を変更できるシリアル端末を入手した場合、この機能を変更できます。

Arduinoターミナルには多くのオプションがありません。これがデフォルトです。その他では、さらに多くの設定が可能です。フロー制御をnoneに設定すると、ボードをリセットせずにシリアルから接続/切断できます。コネクタを接続するだけで、スケッチを最初からやり直すことなく出力を表示できるようにする場合のデバッグに非常に役立ちます。

自動リセットを無効にするもう1つの方法は、リセットピンにプルアップ抵抗を配置することです。

シリアル接続での自動リセットの無効化


2
Arduino Unosは、RESETとGNDの間にある10 µFのコンデンサで固定できます。これは、これまで使用してきた1つのインストールで機能します。…
14年

1
PuTTYを使用し、Arduinoが表示されるCOMポート(私の場合はCOM16)に接続してみました。Connection / Serialの「Flow control」が「None」に設定されている場合、Arduinoはリセットされます(他のオプションは「XON / XOFF」、「RTS / CTS」、および「DSR / DTR」です)。PuTTYのバージョン0.60を使用しました。
ピーターモーテンセン

-cont:Arduino Uno R3で試されました。
ピーターモーテンセン

DuemilanoveとUnoには、この動作を制御する「EN RESET」というラベルの付いたトレースがあります。そのトレースをスクラッチして、自動リセットを無効にします。パッド全体にワイヤーをはんだ付けして、再度有効にします。
-mhopeng

12

真実は常にデータシート、回路図、コードにあります。

/DTR次のデータシートでわかるように、Arduino UNOは実際に行を使用してリセットをトリガーします。

回路図をリセット


回路図画像へのリンクが壊れています。
-linhartr22

1
ありがとう、私はそれを修正しました!実際にSOは画像をキャッシュしていると思っていましたが、そうではないようですので、常にオンにしておくようにします。
zmo

繰り返しますが、壊れています。StackExchangeのimgurオプションを使用して、画像として追加できますか?エディターのツールバーの「画像」オプションをクリックするだけです。

完了、ヒントに感謝(メンテナンスを行っていたため、実際には10日間ダウンしていましたが、これは一時的なものでした)
-zmo

1
はい、しかし実際に何が起こりますか?ATmega16U2のプログラム方法(プログラムによってCOMポートが開かれたときにPD7をLowにアサートする方法)が原因ですか?または、DTRの標準に従っていますか?)。そして、C5の意味は何ですか?-両方の遷移(低から高、高から低)でメインプロセッサをリセットしますか?メインプロセッサのリセットピンのおよそのパルス幅(マイクロ秒)とは何ですか?
ピーターモーテンセン

1

これにより問題が修正されます

import os
import sys
import termios
import fcntl

        self.fd = sys.stdin.fileno()

        # Stop resetting the arduino on serial connect

        self.newattr = termios.tcgetattr(self.fd)
        self.newattr[2] = self.newattr[2] & ~termios.HUPCL
        termios.tcsetattr(self.fd, termios.TCSANOW, self.newattr)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.