Sämtliche Zeichen eines Arrays um eine Stelle verschieben

Chris72622:
Oh Gott, bitte ja!!

Anbei mal ein paar Deklarationen und Funktionen zur Verwaltung eines FIFO-Ringpuffers.

#define FIFOSIZE 25
char fifoBuf[FIFOSIZE]; // ring buffer
byte fifoReadIndex,fifoWriteIndex;  // read and write index into ring buffer

void fifoWrite(char c)
// write char into buffer
{
  fifoBuf[fifoWriteIndex]=c; // store the char
  fifoWriteIndex++;  // advance write pointer in ringbuffer
  if (fifoWriteIndex>=FIFOSIZE) fifoWriteIndex=0; // ring buffer is at its end
}  

char fifoRead()
// read char from buffer
// always check first if char is available with fifoAvailable()
// before reading the buffer using this function
{ 
  char c;
  c=fifoBuf[fifoReadIndex];
  fifoReadIndex++;
  if (fifoReadIndex>=FIFOSIZE) fifoReadIndex=0;
  return(c);
}  

boolean fifoAvailable()
// checks for available chars in buffer
// char is available for reading if (fifoReadIndex!=fifoWriteIndex)
{
  return (fifoReadIndex!=fifoWriteIndex);
}

Falls FIFOSIZE über 255 groß werden soll, müssen fifoReadIndex,fifoWriteIndex als int statt byte deklariert werden.

Falls man andere Datentypen als char puffern möchte, ist dies durch kleinere Änderungen an fifoBuf, fifoWrite() und fifoRead() möglich.

Falls der FIFO-Puffer in Interrupt-Serviceroutinen verwendet werden soll, so dass er z.B. in einer ISR mit Daten gefüllt und in der loop ausgelesen werden soll, sind ebenfalls kleinere Änderungen notwendig.

Und immer dran denken: Die Funktion fifoRead() darf erst dann aufgerufen werden, nachdem mit fifoAvailable() geprüft wurde, ob tatsächlich etwas zum Auslesen im Puffer vorhanden ist!

Also zum Auslesen immer starten mit:
while (fifoAvailable()) ...
oder
if (fifoAvailable()) ...

Vielleicht kannst Du etwas damit anfangen.