注釈

こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。

参加する理由は?

  • エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。

  • 学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。

  • 独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。

  • 特別割引:最新製品の独占割引をお楽しみください。

  • 祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。

👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!

5.12 シリアルリード

Serial.print() 関数を使用するとき、これに気づいたかもしれません。 印刷があるなら、読取りはありますか?シリアルモニターのテキストボックスは何に使われるのでしょうか? そう、推測通り、シリアルモニタのテキストボックスに情報を入力することで、プログラムや回路を制御する方法があります。

このプロジェクトでは、I2C LCD1602を使用して、シリアルモニタに入力されたテキストを表示し、 Serial.read() の使用法を体験します。

必要な部品

このプロジェクトでは、以下の部品が必要です。

キットをまとめて購入するのはとても便利です、リンクはこちら:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

購入

ジャンパーワイヤー

購入

I2C LCD1602

購入

回路図

../_images/circuit_7.1_lcd1602.png

配線図

../_images/lcd_bb.jpg

コード

注釈

  • 3in1-kit\basic_project\5.12.serial_read のパスの下にある 5.12.serial_read.ino ファイルを開きます。

  • または、このコードを Arduino IDE にコピーします。

  • ここでは LiquidCrystal I2C ライブラリが使用されています。 Library Manager からインストールできます。

    ../_images/lib_liquidcrystal_i2c.png

コードが正常にアップロードされたら、シリアルモニターのテキストボックスにテキストを入力することができ、LCDに情報が表示されます。

どのように動作するのか?

void loop()
{
// シリアルポートから文字が届いたとき...
    if (Serial.available()) {
        // メッセージがすべて届くのを少し待つ
        delay(100);
        // 画面をクリア
        lcd.clear();
        // 利用可能なすべての文字を読み取る
        while (Serial.available() > 0) {
            // LCDに各文字を表示
            lcd.write(Serial.read());
        }
    }
}
  • Serial.available() は、テキストボックスから何かを入力したときに、入ってくるストリームの文字の数を取得できます。入力には2つの終端記号があるため、 A を入力すると3文字、 AB を入力すると4文字が得られます。

  • Serial.read() は、入ってくるストリームから最初の文字を取得します。例えば、 AB を入力した場合、 Serial.read() を一度だけ呼び出すと、文字 A が得られます。2回目の呼び出しで B が得られます。3回目と4回目の呼び出しで、2つの終了記号が得られます。入力ストリームに利用可能な文字がない状態でこの関数を呼び出すとエラーになります。

要するに、上記の二つを組み合わせ、 while ループを使用して、入力されたすべての文字を毎回読み取ることが一般的です。

while (Serial.available() > 0) {
    Serial.print(Serial.read());
}

ちなみに、入ってくるストリームから文字を取得するために Serial.read() を使用しないと、入ってくるストリームの文字が重なり合ってしまいます。 例えば、 A の後に AB を入力すると、入ってくるストリームは7文字を蓄積します。