PS: Naja- so hab ich es vorerst mal gelöst, hab aber das starke Gefühl, dass das nicht die optimale Lösung sein kann:
Besonders dann nicht, wenn der Zeichenpuffer vielleicht auch mal 10, 50, 100 oder 200 Zeichen groß sein soll.
;-)
Also mit einem FIFO-Ringpuffer funktioniert es so:
Du hast den Puffer selbst, einen Lesezeiger und einen Schreibzeiger
Der Lesezeiger und der Schreibzeiger können dabei Pointer (Größe eines Pointers auf Arduino: 2 Bytes) auf Speicherstellen im Array sein. Oder wenn der Ringpuffer nur maximal 255 Zeichen enthält, können es einfach Indexangaben (1 Byte) für das Array sein. Um möglichst speichersparend zu programmieren also einen Leseindex und einen Schreibindex als "byte".
Zu Anfang sind Leseindex und Schreibindex gleich null, sie verweisen auf array[0], und immer wenn Leseindex und Schreibindex gleich sind, bedeutet das so viel: Puffer ist leer, es kann nichts gelesen werden.
Zum Füllen des Puffers hast du ja schon herausgefunden wie es geht: Du füllst das nächste Zeichen an der aktuellen Indexstelle ein (Dein "index" ist also der Schreibindex) und schaltest den Schreibindex um eins weiter. Am Ende des Puffers springt der Schreibindex wieder auf null.
Für eine ganz billige Lösung brauchst Du jetzt nur noch einen Leseindex, der genau so implementiert ist. Wenn Leseindex==Schreibindex ist der Puffer leer, dann nichts lesen. Ansonsten nach dem Lesen eines Zeichens immer den Leseindex um eins weitersetzen, am Ende wieder auf 0, und gelesen werden kann, bis Leseindex==Schreibindex erfüllt ist.
Knifflig wird es mit so einem Puffer nur, wenn er überlaufen kann, d.h. wenn mehr Zeichen in den Puffer geschrieben werden als es seiner Größe entspricht, bevor er ausgelesen wird.
Die einfachste und wenig sinnvolle Möglichkeit ist: Beim Overflow wird der Schreibindex weitergeschaltet bis auf den Leseindex. Dann ist der Puffer logisch "leer", kann nicht mehr ausgelesen werden, die im Puffer enthaltenen Zeichen sind verloren.
Am zweiteinfachsten zu implementieren und deutlich sinnvoller wäre folgende Overflow-Logik: Wenn ein Zeichen den Puffer vollgeschrieben hat und das Versetzen des Schreibzeigers zu der Bedingung Leseindex==Schreibindex führen würde, dann den Schreibindex NICHT versetzen. So bleibt dann die geschriebene Zeichenzahl im Puffer zwar erhalten (und kann ausgelesen werden), aber der nächste Schreibvorgang führt dazu, dass das zuletzt geschriebene Zeichen wieder überschrieben wird (d.h. es geht ein Zeichen verloren, jedesmal wenn ein Zeichen in einen vollen Puffer geschrieben werden soll).
Falls Du Fragen zur Realisierung hast, kann ich ggf. auch ein paar Codeschnipsel zu einem FIFO-Ringpuffer raussuchen.