CodeShorty: Serieller Interrupt

Last Updated on 15. Oktober 2026 by sfambachLink-Status: OK

Ist es möglich, Eingaben auf der Seriellen-Schnittstelle per Interrupt abzufangen?

Die Antwort ist wohl eher Jain, es ist möglich, die Serial Event Funktion zu verwenden. Diese wird nach jeder Loop ausgeführt, unterbricht diese aber nicht.

Zweck

  • Benutzereingaben über Terminal
  • Kommunikation mit anderen Geräten über die Serielle-Schnittstelle

Nötige Bibliotheken

Keine

Programm

Es gibt in der Arduino-Gui die Möglichkeit, eine EventFunktion zu verwenden. Diese wird immer nach dem Loop aufgerufen, unterbricht aber keinen laufenden Code.

Quellcode SerialEvent.ino (GitHubLink-Status: OK)

/** Test the Serial Event 
 *  Autor: S. Fambach
 *  Visit http://www.fambach.net if you want
 */


boolean stringComplete = false;
String serialInput;

/**
 * Remove sting to the first occurance of \n
 */
String getFirstInput() {
  int index = serialInput.indexOf("\n");
  String ret = serialInput.substring(0, index);
  // remove also the new line
  serialInput.remove(0, index+1);
  stringComplete = false;
  return ret;
}

void setup() {

  // start the serial
  Serial.begin(115200);

  // reserve some memmory for the string
  serialInput.reserve(50);
}

void loop() {

  // if there is a finished input do something
  if ( stringComplete ) {
    Serial.print("Received: ");
    Serial.println(getFirstInput());

  }
}

/** 
 *  serial event function will be called after the loop automatically
 *  
 */
void serialEvent() {

  // read everything from the serial
  while (Serial.available()) {
    Serial.print(".");
    char inChar = (char)Serial.read();
    // add it to the inputString:
    serialInput += inChar;

    if (inChar == '\n' ) {
      stringComplete = true;

    }
  }
}

Damit die Event Funktion nicht blockiert, habe ich die WHILE Schleife herausgenommen. Die Funktion ist die gleiche wie vorher, allerdings wird bei jedem Zeichen nochmal die Arbeitsschleife durchlaufen. Dies kann evtl. zu anderen unerwünschten Effekten führen.

Quellcode SerialEventNonBlocking.ino (GitHubLink-Status: OK)

/** Test the Serial Event
 *  Read data in the event and print it when its finished
 *  Autor: S. Fambach
 *  Visit http://www.fambach.net if you want
*/


boolean stringComplete = false;
String serialInput;

/**
   Remove sting to the first occurance of \n
*/
String getFirstInput() {
  int index = serialInput.indexOf("\n");
  String ret = serialInput.substring(0, index);
  // remove also the new line
  serialInput.remove(0, index + 1);
  stringComplete = false;
  return ret;
}

void setup() {

  // start the serial
  Serial.begin(115200);

  // reserve some memmory for the string
  serialInput.reserve(50);
}

void loop() {

  // if there is a finished input do something
  if ( stringComplete ) {
    Serial.print("Received: ");
    Serial.println(getFirstInput());

  }
}

/**
    serial event function will be called after the loop automatically

*/
void serialEvent() {

  // read something
}

Probleme

Ausgabe erfolgt nicht

Darauf achten, dass das verwendete Terminal auf das Zeilenende „new line“ eingestellt ist.

Fazit

Kein Interrupt, aber dafür eine Funktionalität, die man nutzen kann.

Andere Shorties

Quellen

https://forum.arduino.cc/t/how-to-use-serial-interrupt-in-arduino/335712/29Link-Status: OK

https://www.arduino.cc/en/Tutorial/BuiltInExamples/SerialEventLink-Status: OK

https://forum.arduino.cc/t/interrupt-uber-serielle-schnittstelle/545390Link-Status: OK

https://forum.arduino.cc/t/interrupt-sobald-daten-in-serial-eingangspuffer-stehen/132916Link-Status: OK

DatumÄnderungAutor
15.10.2026Beispielcode als Code-Block eingefügt (Einbettung über gist-it.appspot.com funktionierte nicht mehr)sfambach
03.10.2026Rechtschreibung korrigiert: Tippfehler, Groß-/Kleinschreibung, Kommas
Log-Liste eingefügt
sfambach
14.11.2021Beitrag erstelltsfambach
Logbuch

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert