Serial empfangene werte in Integer Array

Hallo,
ich schicke per Serial Kommunikation Nachrichten wie “c;1;2;3;4” and den Arduino.

“c” steht dafür für das Kommando
1;2;3;4 sind einzelne Werte mit denen der Arduino dann weiter was machen soll

Bisher habe ich folgenden Code:

// This example sets all the values of the digital pins with a list through a callback function

#include <Messenger.h>
// Instantiate Messenger object with the default separator (the space character)
Messenger message = Messenger(’,’);

// Create the callback function
void messageReady()
{
if ( message.checkString(“c”) )
{
// Loop through all the available elements of the message
while ( message.available() )
{
int value = message.readInt();

Serial.println(value);
}
}
else if
{
if ( message.checkString(“PING”) )
Serial.println(“ACK”);
}
else
//falls es eine message für die es kein handling gibt
message.readInt();
}

void setup() {
// Initiate Serial Communication
Serial.begin(115200);
// Attach the callback function to the Messenger
message.attach(messageReady);
}

void loop() {
// The following line is the most effective way of using Serial and Messenger’s callback
while ( Serial.available() ) message.process(Serial.read () );
}

Was mir jetzt fehlt ist ist:
An der Stelle wo der empfangene Wert wieder seriell zurückgeschickt wird, soll dieser Wert auch in ein Int Array geschrieben werden, so dass ich letztendlich alle empfangenen Werte in diesem Array habe.
Wie kann dies erreicht werden?

Ich würde sagen, ganz einfach so:
ein Array und eine Variable definieren, das Feld hat jetzt 101 Werte;
immer wenn ein Wert gelesen wird, wird i eins hoch gezählt und der Wert in das entsprechende Feld geschrieben.
Oder hast du was anderes gemeint?

// This example sets all the values of the digital pins with a list through a callback function 

#include <Messenger.h>
// Instantiate Messenger object with the default separator (the space character)
Messenger message = Messenger(','); 
int i, Wert[100];
// Create the callback function
void messageReady()
{
  if ( message.checkString("c") ) 
   i=0;  
  {
       // Loop through all the available elements of the message
       while ( message.available() ) 
       {
          int value = message.readInt();
          
          i++;
          Wert[i] = value;
         
          Serial.println(value);
        }
  }
  else if
  {
   if ( message.checkString("PING") )
     Serial.println("ACK");    
  }
  else
    //falls es eine message für die es kein handling gibt
    message.readInt(); 
}


void setup() {
  // Initiate Serial Communication
  Serial.begin(115200); 
  // Attach the callback function to the Messenger
  message.attach(messageReady);
}


void loop() {
  // The following line is the most effective way of using Serial and Messenger's callback
  while ( Serial.available() )  message.process(Serial.read () );
}

Im grunde genau so, allerdings als dynamisches Array.

So kann die Nachricht ja maximal 100 Werte haben und falls es beispielsweise nur 3 Werte gibt, hab ich dann ein Array von denen 97 Plätze unbelegt sind.

ok ich habe gerade gesehen, dass ich sowieso auf eine andere Möglichkeit zurückgreifen muss. Grund dafür ist, dass diese Libraries anscheinend keine längeren Nachrichten verarbeiten können.

Also die Frage:
Ich sende vom PC ca. folgendes an den arduino (mal mehr, mal weniger):

8860,4340,600,520,560,500,620,500,600,480,600,500,600,480,640,460,600,500,600,1620,580,1580,620,1620,580,1580,600,1580,620,1620,580,1600,580,1620,600,1600,580,1620,580,1560,640,1600,600,1560,620,520,580,500,600,520,560,500,600,520,600,480,600,520,580,500,600,1620,560,1620,580,1580,620,38980,8840,2140,600,0

Wie bekomme ich diese Integers getrennt nach “,” am Arduino als Int Array heraus?

//edit:
Ok ich habs mit folgendem code jetzt fast geschafft:

void setup()
{
// Initiate Serial Communication
Serial.begin(9600);

// Attach the callback function to the Messenger
message.attach(messageReady);

Serial.println(deviceName + " ready!!");
}

// Create the callback function
void messageReady()
{
char firstChar = message.readChar(); // Gets the first word as a character

if (firstChar == ‘s’)
{
int msg[maxMsgLength];

for (int i=0; i<maxMsgLength;i++)
msg = -1;

int value;
int counter = 0;
do
{
value = message.readInt();

if (value != -1)
msg[counter] = value;

counter++;
}
while (value != -1);

for (int i=0; i<maxMsgLength;i++)
if (msg != -1)
Serial.println(msg);
}
else
Serial.println(“UNKNOWN CMD”);

Serial.println("—");
}

void loop()
{
while ( Serial.available() )
message.process(Serial.read () );
}

2 probleme sind jetzt noch da:

  1. Wenn ich eine große integer zahl schicke, kommt beim Arduino irgendwas raus: Beispielsweise wird 123456 zu -7616
  2. Anscheinend kann ich keine messages mit mehr als 63 zeichen empfangen

Ideen?

dynamische Arrays gibt es bei Arduino nicht. Grüße Uwe