「Hello World」をシリアルに印刷する簡単なスケッチを持っていますが、代わりにたくさんの意味不明なものがあります。
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello World");
delay(1000);
}
コードが言うように「Hello World」を印刷しないのはなぜですか?
「Hello World」をシリアルに印刷する簡単なスケッチを持っていますが、代わりにたくさんの意味不明なものがあります。
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello World");
delay(1000);
}
コードが言うように「Hello World」を印刷しないのはなぜですか?
回答:
ボードと端末はおそらく同じボーレートを使用していないでしょう。Arduinoシリアルターミナルの右下隅を確認し、9600に設定されていることを確認します。
シリアル通信は、データストリーム全体を一度に1ビットずつ送信することで機能します。これは、一度に1バイトを送信する標準のパラレルポートとは対照的です。両方のデバイスは、データの送信速度を知る必要があります。さらに、両方のデバイスが同じ速度で動作する必要があります。これはボーレートと呼ばれます。
ボーは実際には1秒あたりのパルスを意味します。シリアル通信のコンテキストでは、1秒あたりに送信されるビット数を意味します。最も一般的な値の1つは9600ですが、9600の係数または倍数である他の一般的な値もあります。ただし、両方のデバイスが同じ速度で動作する限り、それは実際には重要ではありません。
メッセージを取得するよりも速くメッセージを送信すると、データが失われます。あなたがメッセージを受信するよりも遅い速度でメッセージを送信している場合、あなたは私があなたに送信したものと混ざってしまいます。
のドキュメントをbegin()
見ると、次の2つのパラメーターを使用できることがわかります。
Serial.begin(speed)
Serial.begin(speed, config)
これで速度を理解できれば幸いです。Arduinoが通信するのは1秒あたりのビット数です。
2番目のパラメーターをconfig
使用すると、シリアルデータ送信に関するその他の設定を行うことができます。これらは、データ、パリティ、およびストップビットです。ページに5N1
、6N1
などの値が表示されます。SERIAL_8N1 (the default)
最初の数値は、データビット数を表します。2番目の文字は、パリティビットの種類を示します。E
偶数パリティのために、O
奇数パリティのために、またはN
パリティなし。3番目の数字は、ストップビットの数を示します。
実際、8N1では、8ビットの「your」データごとに10ビットが送信されます。1スタートビット、8データビット、1ストップビット。
とにかく、双方はこの情報と速度について同意する必要があります。Arduinoシリアルターミナルには、これらの設定を変更するオプションはありませんが、他の設定は変更するため、これらの構成設定がすべて同じであることを確認する必要があります。
wikiの詳細:非同期シリアル通信
Sachleenの答え(上記)は次のとおりです。
The board and terminal are probably not using the same baud rate.
Check the bottom right corner of the Arduino Serial Terminal
and make sure it is set to 9600.
この数が9600で、それでもデータが文字化けする場合は、コードのアップロード時に取得した出力を確認してください。次のようになります。
Sketch uses 2754 bytes (8%) of program storage space. Maximum is 30720 bytes.
Global variables use 195 bytes (9%) of dynamic memory, leaving 1853 bytes for local variables. Maximum is 2048 bytes.
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM5 -b57600 -D -Uflash:w:C:\Users\Owner\AppData\Local\Temp\arduino_build_457862/LockCode.ino.hex:i
avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"
Using Port : COM5
Using Programmer : arduino
Overriding Baud Rate : 57600
(私が投稿したものの)この一番下の行は、デバイスのデフォルトのボーレートを示しています。私のために、Serial.begin(9600);
-> を変更しSerial.begin(57600);
て、Arduino Serial Terminalの右下隅が57600であることを確認しました。
これを実行して動作した後、9600に切り替えて、文字化けしていないデータを取得することができました。Arduinoは気難しいようです...