変なシリアルデータ


12

「Hello World」をシリアルに印刷する簡単なスケッチを持っていますが、代わりにたくさんの意味不明なものがあります。

void setup() {
    Serial.begin(9600);
}

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

コードが言うように「Hello World」を印刷しないのはなぜですか?


シリアルポートの初期化が適切で、PCシリアル端末と一致するかどうかを確認しましたか?setup()にはSerial.begin(9600)のようなものが必要です。
ラジェンドラ14

@Rajendraその行は、私が与えたコード例にあります。その上、私は実際に問題を抱えていません。これは初心者にとって一般的な問題であり、以下の質問に答えました。
サックリーン14

回答:


8

ボードと端末はおそらく同じボーレートを使用していないでしょう。Arduinoシリアルターミナルの右下隅を確認し、9600に設定されていることを確認します。

シリアルデータ

シリアル通信は、データストリーム全体を一度に1ビットずつ送信することで機能します。これは、一度に1バイトを送信する標準のパラレルポートとは対照的です。両方のデバイスは、データの送信速度を知る必要があります。さらに、両方のデバイスが同じ速度で動作する必要があります。これはボーレートと呼ばれます。

ボーレート

ボーは実際には1秒あたりのパルスを意味します。シリアル通信のコンテキストでは、1秒あたりに送信されるビット数を意味します。最も一般的な値の1つは9600ですが、9600の係数または倍数である他の一般的な値もあります。ただし、両方のデバイスが同じ速度で動作する限り、それは実際には重要ではありません。

メッセージを取得するよりも速くメッセージを送信すると、データが失われます。あなたがメッセージを受信するよりも遅い速度でメッセージを送信している場合、あなたは私があなたに送信したものと混ざってしまいます。

データ、パリティ、ストップビット

のドキュメントをbegin()見ると、次の2つのパラメーターを使用できることがわかります。

Serial.begin(speed)
Serial.begin(speed, config)

これで速度を理解できれば幸いです。Arduinoが通信するのは1秒あたりのビット数です。

2番目のパラメーターをconfig使用すると、シリアルデータ送信に関するその他の設定を行うことができます。これらは、データ、パリティ、およびストップビットです。ページに5N16N1などの値が表示されます。SERIAL_8N1 (the default)

最初の数値は、データビット数を表します。2番目の文字は、パリティビットの種類を示します。E偶数パリティのために、O奇数パリティのために、またはNパリティなし。3番目の数字は、ストップビットの数を示します。

実際、8N1では、8ビットの「your」データごとに10ビットが送信されます。1スタートビット、8データビット、1ストップビット。

とにかく、双方はこの情報と速度について同意する必要があります。Arduinoシリアルターミナルには、これらの設定を変更するオプションはありませんが、他の設定は変更するため、これらの構成設定がすべて同じであることを確認する必要があります。

wikiの詳細:非同期シリアル通信


0

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は気難しいようです...


0

私はそれを解決するために半時間を費やしました、そしてそれは3.3VであるArduino Pro Miniであり、Arduino IDE(PC上)で5Vを選択していました。シリアルプリントは、同じボーレートが定義されていても、そのようには機能しません。

Arduino IDEで正しいボード選択します

明確にするには、[ ツール ]タブで正しいプロセッサ(電圧/クロック速度)を選択する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.