CodeShorty: Serial Interrupt

Last Updated on 15. October 2026 by SuffocationLink 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.

Purpose

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

Nötige Bibliotheken

None

Programme

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.

Source code 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.

Source code 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
}

Problems

Ausgabe erfolgt nicht

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

Conclusion

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

Andere Shorties

Sources

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

DateChangeAuthor
15.10.2026Beispielcode als Code-Block eingefügt (Einbettung über gist-it.appspot.com funktionierte nicht mehr)Suffocation
03.10.2026Rechtschreibung korrigiert: Tippfehler, Groß-/Kleinschreibung, Kommas
Log-Liste eingefügt
Suffocation
14.11.2021Post createdSuffocation
Changelog

Leave a Reply

Your email address will not be published. Required fields are marked *