Serielle Kommunikation

Das nennt sich ASCII. Du musst das nur richtig interpretieren und die richtigen Datentypen verwenden:

Das Problem ist aber nicht das, sondern aus den einzelnen Ziffern oder Zeichen ganze Strings und Zahlen zu basteln. Am allgemeinsten geht es wenn du den seriellen Monitor so einstellst dass am Ende ein LF/Linefeed gesendet wird. Damit kann man das Ende der Übertragung erkennen. Dann liest du alles in einen C String ein. Diesen kannst du dann bearbeiten wie du willst. Du kannst die Daten direkt als Text ausgeben. Oder mit Konvertierungsfunktionen in Zahlen umwandeln.

const int SERIAL_BUFFER_SIZE = 10;
char serialBuffer[SERIAL_BUFFER_SIZE];

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

void loop()
{
  if (readSerial(Serial))      //liefert true wenn das LF eingelesen wurde
  {
    Serial.println(serialBuffer);
  }
}


bool readSerial(Stream& stream)
{
  static byte index;

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

    if (c == '\n' && index > 0)       //wenn LF oder CR eingelesen und String länger als 0 ist
    {
      serialBuffer[index] = '\0';     //String terminieren
      index = 0;
      return true;                    //melden dass String fertig eingelesen wurde
    }
    else if (c >= 32 && index < SERIAL_BUFFER_SIZE - 1)   //solange noch Platz im Puffer ist
    {
      serialBuffer[index++] = c;    //Zeichen abspeichern und Index inkrementieren
    }
  }
  return false;        //noch nicht fertig
}

Nicht von der while-Schleife verwirren lassen. Normal ist Serial so langsam dass zwischen den Zeichen eine lange Zeit vergeht! Und die Schleife wird nur einmal durchlaufen. Deshalb muss man die Funktion immer wieder aufrufen. Das ist auch ein sehr beliebter Anfängerfehler.

Das gibt den empfangenen Text einfach direkt aus. Wenn man die Werte wirklich als Integer braucht reicht einfach das:

void loop()
{
  if (readSerial(Serial))
  {
    int value = atoi(serialBuffer);
    Serial.println(value);
  }
}

atoi() = ascii to integer. Genauso gibt es auch Konvertierungsfunktionen für andere Datentypen. Oder auch um Hex-Strings einzulesen

Rein für positive Zahlen geht auch das:

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

void loop()
{
  int value = readSerial(Serial);
  if (value > 0)
  {
    Serial.print("read: "); 
    Serial.println(value);
  }
}

int readSerial(Stream& stream)
{
  static int value;
  
  while (stream.available())
  {
    char c = stream.read();

    if (c == '\n')
    {
      int tmp = value;
      value = 0;
      return tmp;
    }
    else if (c >= '0' && c <= '9')
    {
      value *= 10;
      value += c - '0';
    }
  }
  
  return -1;
}

Da werden die Ziffern einfach aufaddiert