5.12 Serielle Lektüre

Vielleicht haben Sie dies bemerkt, als Sie die Funktion Serial.print() verwendet haben. Da es eine Ausgabe gibt, gibt es auch eine Eingabe? Wofür ist das Textfeld im Seriellen Monitor? Ja, Sie haben richtig geraten. Es gibt Möglichkeiten, Programme und Schaltungen durch Eingabe von Informationen über das Textfeld des seriellen Monitors zu steuern.

In diesem Projekt verwenden wir das I2C LCD1602, um den im Seriellen Monitor eingegebenen Text anzuzeigen und die Verwendung von Serial.read() kennenzulernen.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein komplettes Kit zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

Sie können diese auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

SunFounder R3 Platine

BUY

Jumper-Kabel

BUY

I2C LCD1602

BUY

Schaltplan

../_images/circuit_7.1_lcd1602.png

Verdrahtung

../_images/lcd_bb.jpg

Code

Bemerkung

  • Öffnen Sie die Datei 5.12.serial_read.ino unter dem Pfad 3in1-kit\basic_project\5.12.serial_read.

  • Oder kopieren Sie diesen Code in die Arduino IDE.

  • Hier wird die Bibliothek LiquidCrystal I2C verwendet. Sie können sie aus dem Library Manager installieren.

    ../_images/lib_liquidcrystal_i2c.png

Nachdem der Code erfolgreich hochgeladen wurde, können Sie Text in das Textfeld des seriellen Monitors eingeben, und das LCD zeigt die Informationen an.

Wie funktioniert das?

void loop()
{
// wenn Zeichen über die serielle Schnittstelle ankommen...
    if (Serial.available()) {
        // warten Sie kurz, damit die gesamte Nachricht ankommt
        delay(100);
        // den Bildschirm leeren
        lcd.clear();
        // lesen Sie alle verfügbaren Zeichen
        while (Serial.available() > 0) {
            // zeigt jedes Zeichen auf dem LCD an
            lcd.write(Serial.read());
        }
    }
}
  • Serial.available() kann die Anzahl der Zeichen in dem eingehenden Stream erhalten, wenn Sie etwas aus dem Textfeld eingeben. Da es in der Eingabe zwei Abschlusszeichen gibt, haben Sie tatsächlich 3 Zeichen, wenn Sie A eingeben und 4 Zeichen, wenn Sie AB eingeben.

  • Serial.read() nimmt das erste Zeichen aus dem eingehenden Stream. Wenn Sie zum Beispiel AB eingeben und Serial.read() nur einmal aufrufen, erhalten Sie das Zeichen A; Beim zweiten Aufruf erhalten Sie B; beim dritten und vierten Anruf erhalten Sie zwei Endsymbole; das Aufrufen dieser Funktion, wenn keine Zeichen im Eingabestream verfügbar sind, führt zu einem Fehler.

Zusammenfassend ist es üblich, die beiden oben genannten Funktionen zu kombinieren und mit einer while-Schleife alle bei jedem Eingabevorgang eingegebenen Zeichen zu lesen.

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

Übrigens, wenn Sie Serial.read() nicht verwenden, um Zeichen aus dem eingehenden Stream zu erhalten, werden die Zeichen des eingehenden Streams aufgestapelt. Zum Beispiel, wenn Sie A gefolgt von AB eingeben, wird der eingehende Stream 7 Zeichen anhäufen.