Messwert Abfrage über RS232

Passt den mein Code auf den ersten Blick ?

Nein. read() liest nur ein Zeichen aus. Damit kannst du so einfach keinen String einlesen. Mit direkter Ausgabe mag das vielleicht irgendwann ankommen. Aber damit kannst du nichts auswerten

Text der gesendet wird wird wie üblich mit CR + LF abgeschlossen wenn ich das richtig sehe. Damit muss man nur solange einlesen bis das LF da ist:

const unsigned int READ_BUFFER_SIZE = 21;    //Platz für 20 Zeichen + Terminator

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  char* str = readLine(Serial);  //liefert true wenn das LF eingelesen wurde
  if (str != nullptr) 
  {
    Serial.print("Eingelesen: ");
    Serial.println(str);
  }
}

char* readLine(Stream& stream)
{
  static byte index;
  static char buffer[READ_BUFFER_SIZE];

  while (stream.available())
  {
    char c = stream.read();

    if (c == '\n')              //wenn LF eingelesen
    {
      buffer[index] = '\0';     //String terminieren
      index = 0;
      return buffer;            //melden dass String fertig eingelesen wurde
    }
    else if (c >= 32 && index < READ_BUFFER_SIZE - 1)   //solange noch Platz im Puffer ist
    {
      buffer[index++] = c;    //Zeichen abspeichern und Index inkrementieren
    }
  }
  return nullptr;               //noch nicht fertig
}

Das fragt einfach immer wieder ab ob ein Zeichen im Eingangspuffer ist. Wenn ja wird das Zeichen in ein Array kopiert. Wenn nein bricht die Funktion gleich wieder ab. Wenn das Endzeichen eingelesen wurde meldet man dass man fertig ist und kann dann den String Parsen