Serielle Schnittstelle Auslesen probleme

ich meine das die genanten Programm alle auf WIN laufen ich habe hier einen MAC :frowning:
geht auch so ;-), es ist auch etwas Chaotisch für mich da ich die Codeschnipsel nicht alle zu 100% kenne, und immer erst wider lesen muss was was ist. peinlich und das bei so einem Kleinen Programm peinlich

Om das ist eine Gute Idee das baue ich gleich mal mit ein :wink:
also das „if(text != NULL)“

Den Rest werde ich mal versuchen umzusetzen wie du das beschrieben hast.
ich habe das Test Programm noch mal etwas umgeschrieben:

/* 
  Befehl              Reagzion             Antwort
  
  Name:               Ausgabe              Programm Name
  
  Firmware:           Ausgabe              Firmware Nr.
  
  Reset:              Sätzt das Array      Hadware Reset  
                      Hadware wider auf 
                      0
                      
  Print:              Ausgabe der hadware 
                      Config in einer Tabelle
                      
  Config:1,10,30,0    sätzt die Hadware    Zahlenfolge
                      Configuration neu ...
*/

   #define ZEILENTRENNZEICHEN 13                                // 13 ist Steuerzeichen CR (Carriage Return)

// Config Daten 
   char Firmware_Nr[] = "1.0.1";                                // Firmware
   char Name[]        = "Tropfen Box";                          // Programmmane
   int  startPin      = 2;                                      // Hier ist der taster angeschloßen
   int  Baudrate      = 9600;                                   // Baudrate für die Übertragung zwischen Arduino und PC 
   int  Lauf          = 0;                                      // Zwischenspeicher
   struct hardware_t{int pin;long vorlaufzeit; long dauer;};    // Hadware Strucktur
// Test Hadware Arrey füllen   
   hardware_t hardware[5]=
    {
      {3, 10, 30},
      {4, 50, 30},
    };
   int schritte = sizeof(hardware) / sizeof(hardware[0]);       // Anzahl der Hadware Schritte definiren


// Das ist eine Funktion !!!
char* receiveBuffer()
 {
  static char lineBuffer[100];                                              // Maximale Zeilenlänge festlegen
  static byte counter=0;
  char c;
  
  if (Serial.available()==0) return NULL;                                   // Nullpointer zurück
  if (counter==0) memset(lineBuffer,0,sizeof(lineBuffer));                  // Puffer vor Benutzung löschen
  c=Serial.read();                                                          // Aktueller Pufer in c Speichern

  if (c==ZEILENTRENNZEICHEN)                                                // wenn c gleich ZEILENTRENNZEICHEN dann aufführen 
   {
     counter=0;                                                             // Zähler zurücksätzen damit neue Zeilen empfangen werden kann
     return lineBuffer;                                                     // Volständige Zeile zurückgeben
   }
   else if (c>=32)                                                          // kein Steuerzeichen! (23 = Ascii zeichen !)
   {
    lineBuffer[counter]=c;                                                  // Zeichen im Zeilenpuffer einfügen
    if (counter<sizeof(lineBuffer)-2) counter++;
   }
   return NULL;
  }
// Das ist eine Funktion !!!

void setup()
 { 
    Serial.begin(Baudrate);                       // Serielenport Starten
    pinMode(startPin, INPUT);                     // startPin auf INPUT setzen (Taster) 
 }                                                 


void loop()
{
 char* text=receiveBuffer();                                                // Alles aus der Serielenschnitstelle Lesen
 if(text != NULL)
  {
     if (strcmp(text,"Name:")==0)                                               // Befehl prüfen "Name:"
       {Serial.println(Name);}                                                     // Ausgabe
     if (strcmp(text,"Firmware:")==0)                                           // Befehl prüfen "Firmware:"
       {Serial.println(Firmware_Nr);}                                              // Ausgabe
     if (strcmp(text,"Reset:")==0)                                              // Befehl prüfen "Reset:"
       {memset(hardware, 0, sizeof(hardware)); Serial.println("Hadware Reset");}   // Hadware Reseten und Ausgabe
     if (strcmp(text,"Print:")==0)                                              // Befehl prüfen "Print:"
       {  
          for (int i=0;i<schritte;i++)
          {
            Serial.print(hardware[i].pin);
            Serial.print(", ");
            Serial.print(hardware[i].vorlaufzeit);
            Serial.print(", ");
            Serial.println(hardware[i].dauer);
          }
       }
     // Hier muss jetzt die Erkennung Config rein
   }
}

das ich bei deiner Version immer "Config:" eingeben muss finde ich nicht so schlimm: später soll das Arduino über eine Andere Software angesprochen werden, damit ich eine Grafische Oberfläche habe und nicht alles Tippen muss, daher macht mir das nichts aus.