Die Arduino print Funktion Serial.print() ermöglicht es, Daten über die serielle Schnittstelle zu senden. Dabei kann es sich z. B. um Sensorwerte oder Rechenergebnisse von Funktionen handeln. Der folgende Befehl sendet den String (Zeichenkette) »Hallo Welt« über die serielle Schnittstelle:
Serial.print("Hallo Welt");
Voraussetzung ist, dass die serielle Schnittstelle vorher im Setup gestartet wurde. Das geschieht mit dem Befehl Serial.begin(9600). Der Wert in den Klammern ist die Baud-Rate, also die Übertragungsgeschwindigkeit. Es gibt unterschiedliche Standard-Baud-Raten, z.B. 9600 oder auch 112500. (Erstere ist sehr langsam und führt schnell zu Verzögerungen im Programmablauf oder der Verarbeitung serieller Signale.)
Die Baud-Rate muss auf Sender- und Empfängerseite, also vom Arduino zum seriellen Monitor, gleich sein. Im Seriellen Monitor der Arduino Software lässt sie sich im Auswahlfeld unten rechts einstellen.
Das folgende Beispiel sendet die aktuellen Millisekunden an die serielle Schnittstelle.
void setup(){ Serial.begin(9600); // startet serielle Kommunikation mit einer Baud-Rate von 9600 } void loop(){ Serial.print(millis()); // sendet aktuelle Millisekunden Serial.print(" "); // sendet ein Leerzeichen delay(10); // kurze Pause }
Arduino print – Daten anzeigen
Anzeigen lassen kann man sich die Daten z. B. im seriellen Monitor der Arduino-Software (Menü>Werkzeuge>Serieller Monitor).
Im Gegensatz zu Serial.println() erzeugt Serial.print() keinen Zeilenumbruch. Das bedeutet, dass alle Informationen hintereinander im seriellen Monitor ausgegeben werden.
Für das Debuggen kann das durchaus hilfreich sein:
Serial.print(millis()); // sendet aktuelle Millisekunden Serial.print("\t Sensor1="); // erzeugt einen Tab-Stop Serial.print(sensorWert1); // Ausgabe Sensorwert Serial.print("\t Sensor2="); // erzeugt einen Tab-Stop Serial.print(sensorWert2); // Ausgabe Sensorwert Serial.print("\t Sensor3="); // erzeugt einen Tab-Stop Serial.println(sensorWert3); // Ausgabe Sensorwert und neue Zeile
Diese Konstruktion erzeugt einen gut lesbaren Output:
12003 Sensorwert1=147 Sensorwert2=328 Sensorwert3=189 12013 Sensorwert1=143 Sensorwert2=328 Sensorwert3=190 12024 Sensorwert1=149 Sensorwert2=328 Sensorwert3=189
Leider ist es in Arduino nicht möglich, mehrere Werte mit nur einem Befehlsaufruf von Serial.print zu senden. Serial.print(“Wert 1=” + wert1) funktioniert nicht, auch wenn ähnliche Konstruktionen in anderen Programmiersprachen ganz normal sind.
»Grafische« Ausgabe
Im seriellen Monitor selbst lässt sich keine grafische Ausgabe erzeugen, allerdings kann man hier zu einem kleinen Trick greifen.
Beispiel: Ein Fotowiderstand wird ausgelesen und soll eine Art grafischer Ausgabe erzeugen. Wir lesen also seinen Wert ganz normal per analogRead ein. Dann lassen wir per for-Schleife Sternchen entsprechend dem Sensorwert ausgeben. Die for-Schleife wird so lange durchlaufen, bis der Sensorwert/10 erreicht ist. Bei jedem Durchlauf wird ein * der Zeile zugefügt. Nach der for-Schleife sorgt ein println(“”) für einen Zeilenumbruch.
void setup(){ Serial.begin(112500); // startet serielle Kommunikation mit einer Baud-Rate von 112500 } void loop(){ int sensorWert = analogRead(0); // liest einen Fotowiderstand aus for (int i=0; i<(sensorWert/10); i++){ Serial.print("*"); } Serial.println(""); // sendet einen Zeilenumbruch delay(10); // kurze Pause }
Beispiele
Mehr Infos zur seriellen Kommunikation findest du auf Wikipedia.
Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!
- Die beliebtesten Arduino-Projekte von StartHardware
- Inklusive Schaltplan, Beschreibung und Code
- Arduino-Schnellstart-Kapitel
- Kompakter Programmierkurs
Serial.print(“Wert 1=” + wert1) funktioniert nicht …
Kann man aber umgehen indem der erste Wert mit einer Variablen definiert wird – etwa so:
String Test=””;
Serial.print(Test+“Wert 1=” + wert1)
oder
Serial.print(“Wert 1=” + String(wert1));
Pingback: Tic-Tac-Toe mit dem Arduino selber bauen - reichelt Magazin
Pingback: Tic-Tac-Toe mit dem Arduino – reichelt Magazin