おいおい記事を書けたらと思うのですが…。
さて、Arduino UnoやArduino nanoでプログラミングを行うと、ターミナルに接続するたびにArduinoにリセットがかかってしまいます。これは、USB経由のシリアル通信でプログラムの書き込み終了後に、自動リセットを掛けるためのもののようです。
いろいろ調べていくと自動リセットを解除する方法がいくつかあるようです。
方法1 ターミナルソフトでシリアルポートのDTR端子出力をH(Hi/1)にする
方法2 Arduino のDTR信号のラインをカットする
DTR-10uF-GNDと接続する
http://www.musashinodenpa.com/arduino/ref/index.php?f=1&pos=92
方法3 ソフトウエアシリアルを使う
方法1
ターミナルソフトはいくつかありますが
a Arduino IDE付属のターミナルソフト
そもそもDTRの設定ができない
b TeraTerm
DTRの設定はマクロを記述することで設定できるが、
COMポートを開いたときにDTRの設定をどうやっても反映されず、
必ずArduinoが再起動する
c RLogin
DTRの設定はあるがどう設定しても必ずArduinoが再起動する
d ターミナルソフトを自作する
未検証
参考:http://nuneno.cocolog-nifty.com/blog/2014/03/arduino-f24c.html
方法3
ソフトウエアシリアルを使う
方法1
ターミナルソフトはいくつかありますが
a Arduino IDE付属のターミナルソフト
そもそもDTRの設定ができない
b TeraTerm
DTRの設定はマクロを記述することで設定できるが、
COMポートを開いたときにDTRの設定をどうやっても反映されず、
必ずArduinoが再起動する
c RLogin
DTRの設定はあるがどう設定しても必ずArduinoが再起動する
d ターミナルソフトを自作する
未検証
参考:http://nuneno.cocolog-nifty.com/blog/2014/03/arduino-f24c.html
方法3
ソフトウエアシリアルを使う
USB接続のシリアルポートは、プログラム書き込み後にプログラムを起動しないといけないのでリセットしなければならないというしがらみがあるわけで、それならシリアルポートを別にもうければよいのであって、それならばソフトシリアルを使えばよい…
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
Serial.begin(57600); // ハードウェアシリアルを準備
while (!Serial) {
; // シリアルポートの準備ができるのを待つ(Leonardoのみ必要)
}
Serial.println("Ready");
mySerial.begin(4800); // ソフトウェアシリアルの初期化
mySerial.println("Hello, world?");
}
void loop() {
if (mySerial.available()) Serial.write(mySerial.read());
if (Serial.available()) mySerial.write(Serial.read());
}
http://www.musashinodenpa.com/arduino/ref/index.php?f=1&pos=92
www.musashinodenpa.comより
原理的にはこれで解決できそうです。Arduino.ccのフォーラムでこれを使っている人がいました。
いろいろ試した結果、ターミナルソフトではDTRの設定がうまく反映されず、『ターミナル接続リセット問題』は未解決です。
いや、現状それほど問題ではないのだけれど、Arduinoの動作状況を確認するためにターミナルで接続したとたんリセットかかると動作状況の確認ができないという。簡単に解決できそうでできない。
TeraTarmもなんでできないのだろうか。
いや、現状それほど問題ではないのだけれど、Arduinoの動作状況を確認するためにターミナルで接続したとたんリセットかかると動作状況の確認ができないという。簡単に解決できそうでできない。
TeraTarmもなんでできないのだろうか。