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
- CodeShorty: Wire Scanning (Uno)Link status: OK
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
| Date | Change | Author |
|---|---|---|
| 15.10.2026 | Beispielcode als Code-Block eingefügt (Einbettung über gist-it.appspot.com funktionierte nicht mehr) | Suffocation |
| 03.10.2026 | Rechtschreibung korrigiert: Tippfehler, Groß-/Kleinschreibung, Kommas Log-Liste eingefügt | Suffocation |
| 14.11.2021 | Post created | Suffocation |