回答:
Serial.begin(9600)
実際には何も印刷しません。そのために、Serial.print("Hello world!")
「Hello world!」というテキストを印刷するために使用したいでしょう。シリアルコンソールに。むしろ、9600ビット/秒でシリアル接続を初期化します。
シリアル接続の両側(つまり、Arduinoとコンピューター)は、何らかの種類のわかりやすいデータを取得するために、同じ速度のシリアル接続を使用するように設定する必要があります。2つのシステムが速度と考えるものに不一致がある場合、データは文字化けします。
Arduinoのデフォルトは9600ビット/秒であり、大部分のユーザーには完全に適切ですが、他の速度に変更することもできます:Serial.begin(57600)
Arduinoを57600ビット/秒で送信するように設定します。送信されるデータを見るには、コンピューターで使用しているソフトウェア(Arduino IDEのシリアルモニターなど)を同じ速度に設定する必要があります。
Serial.begin(0)
と、Arduinoに、毎秒0ビットでシリアルと通信する必要があることが伝えられます。ご想像のとおり、これはArduinoがデータを送信しないことを意味します。 Serial.begin(4000)
Arduinoは4000ビット/秒でデータを送信します。これは非標準ですが、それ以外は問題ありません。
Serial.begin(300)
)、Arduinoのデータ送信が遅くなります。たとえば、57600に増やすと、データがより速く送信されます。送信システムと受信システムの両方で、使用する速度について合意する必要があります:Arduino Serial Monitorウィンドウなどのコンピューターのシリアルプログラムでは、コンピューターがデータを受信する速度を設定できますが、一般的な速度:300、1200、2400、4800、9600、19200、38400、57600および11520ビット/秒 4000など、他の速度を入力することはできません。通常、9600が適切です。
Baud and BPS are two different things... can't find the link I was looking for now.
-1つの説明:付録C:「ボー」対「bps」
写真は1000ワードの価値があるので、彼らは言う(あなたがコンピューターで作業している場合は1024ワード)ので、私はいくつかの写真を投稿します...
9600ボーで「Fab」を送信するようにUnoをセットアップし、ロジックアナライザーで結果をキャプチャしました。
赤で網掛けされている部分は、バイト間の「アイドル」期間です。
上記の図から、Tx(送信)データ行は、文字(バイト)の開始を示すために低下するまで通常は高(1)であることに注意してください。これが開始ビットです。次に、8個のデータビット(白い点で示される)がボーレート(9600サンプル/秒)で表示されます。その後、ラインは再びハイになります。これはストップビット(赤い部分)です。次に、次の文字の開始ビットなどが表示されます。「停止」部分は無期限に長くなる可能性がありますが、少なくとも1ビット長でなければなりません。
最初の文字(文字「F」または0x46または0b01000110)の詳細は、次のとおりです。
A-データなし(Txが高い)
B-「開始ビット」。文字(バイト)の送信が開始されていることを受信者に伝えるために、行が低くなります。レシーバは、ラインをサンプリングする前に1.5クロック時間待機します。
C-最初の文字が到着します(文字「F」または0x46または0b01000110)。クロックビット自体はないため、着信データはボー(送信)レートで単純にサンプリングされます。SPI通信とは対照的に、データは最下位ビットが最初に到着します(バイトあたり8ビットを送信していない場合)。したがって、01100010(01000110ではなく)が表示されます。
D-ストップビット。これは常に高く、このバイトの終わりと次のバイトの始まりを区別できるようにします。スタートビットはゼロで、ストップビットは1であるため、常に1バイトから次のバイトへの明確な遷移があります。
E-次の文字の開始ビット。
ロジックアナライザのキャプチャから、T1 - T2
0.1041667ミリ秒であり、実際には1/9600であることがわかります。
1 / 9600 = 0.00010416666 seconds
したがって、9600のレートは1秒あたりのビット数を示し、逆はビット間の時間間隔です。
シリアル通信は(SPIやI2Cなどとは異なり)自己クロックではないため、送信者と受信者の両方がクロックレートについて合意する必要があります。
Arduinoではクロックレートが正確ではありません。これは、ハードウェアがシリアルクロックを取得するためにシステムクロックを分周する必要があり、分周が常に正確ではないためです。ほとんどの場合エラーが発生し、その量はデータシートに記載されています(Unoなどの16 MHzシステムクロックの数値):
データビットの数を変えることができます。8ビットを送信する必要はありません。実際、5〜9ビットを送信できます。
オプションで、データビットの後にパリティビットを送信できます。
これは、受信者がデータが正しく到着したかどうかを検出するのに役立ちます。
パリティビットは、ストップビットの前に送信されます。
9データビット(SeaTalkプロトコルで使用される)の場合、パリティビットは9番目のデータビットとして再利用されます。したがって、9データビットとパリティビットの両方を使用することはできません。
2つのストップビットを使用することもできます。これは基本的にバイト間の時間を長くするだけです。「昔」では、これは低速の電気機械装置が前のバイトを処理できるようにするためでした(たとえば、印刷するため)。
ストリームの途中でシリアルデータのリッスンを開始した場合、ストリームの途中の0ビットがスタートビットとして解釈され、その後、レシーバーがその後のすべてを誤って解釈する可能性があります。
これから回復するための唯一の本当の方法は、これが起こらないように、時々十分な大きさのギャップ(例えば、10ビット長)を持つことです。
ここに示されているビット(論理レベル)は反転されていません。つまり、1ビットはHIGH、0ビットはLOWです。1ビットの場合は-12 V、0ビットの場合は+12 Vのようなものを送信する可能性のあるRS232機器がある場合。これは、1がゼロよりも小さいため、電圧的には反転します。
そのようなデバイスがある場合は、電圧変換と論理反転を行う必要があります。MAX232のようなチップが両方を行います。また、ユーザーが用意したいくつかのコンデンサを使用して内部で生成することにより、このような機器の駆動に必要な-12 Vを提供できます。
開始ビット1つ、データビット8つ、停止ビット1つで合計10ビットであるため、おおまかな目安として、ビットレートを10で除算することで1秒間に送信できるバイト数を計算できます。
例えば。9600 BPSでは、毎秒960バイトを送信できます。
再現するコード:
void setup()
{
Serial.begin(9600);
Serial.print("Fab");
}
void loop ()
{
}
; TLDR; シリアル通信ポートを初期化し、ボーレートを設定します。通信しているデバイス(またはArduino IDEシリアルモニター)は、一致するボーレートに設定する必要があります。ポートを初期化したら、キャラクターの送受信を開始できます。Arduinoシリアルリファレンス
コンピューターシステム内で動作するプログラムを指定します。数値はspeed.Serial.printを指定し、表示されるテキストを指定します。