Serielle Schnittstelle Auslesen probleme

habe jetzt alle Kommentare Gelöscht dass ich den Code Posten kann habe sonst zu viele Zeichen :frowning:

/* 
  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 ...
*/

// Config Daten 
   #define ZEILENTRENNZEICHEN 13
   char Firmware_Nr[] = "1.0.1";
   char Name[]        = "Tropfen Box";
   int  startPin      = 2;
   int  Baudrate      = 9600;
   int  Lauf          = 0;
   unsigned long gesamtDauer = 0;
   unsigned long starttime;
   unsigned long looptime;
   struct hardware_t{int pin;long vorlaufzeit; long dauer;};
   hardware_t hardware[50]=
    {
      {3, 10, 30},
      {4, 525, 30},
    };
   int schritte = sizeof(hardware) / sizeof(hardware[0]);


// Funktion - Serielle Schnittstelle auslesen -
char* receiveBuffer() {
  static char lineBuffer[100];
  static byte counter=0; 
  char c;
  if (Serial.available()==0) return NULL;
  if (counter==0) memset(lineBuffer,0,sizeof(lineBuffer)) ;
  c=Serial.read();
  if (c==ZEILENTRENNZEICHEN){ 
     counter=0;
     return lineBuffer; }
   else if (c>=32) {
    lineBuffer[counter]=c; 
    if (counter<sizeof(lineBuffer)-2) counter++; }
   return NULL; }
// Funktion - Serielle Schnittstelle auslesen -

void setup() { 
    Serial.begin(Baudrate);
    pinMode(startPin, INPUT);
 
     pinMode(hardware[0].pin,OUTPUT);
    hardware[0].vorlaufzeit*=1000;
    hardware[0].dauer*=1000;
    hardware[0].dauer+=hardware[0].vorlaufzeit;
    pinMode(hardware[1].pin,OUTPUT);
    hardware[1].vorlaufzeit*=1000;
    hardware[1].dauer*=1000;
    hardware[1].dauer+=hardware[1].vorlaufzeit;

 
 
  }                                             // startPin auf INPUT setzen (Taster) 


void loop()
{
 char* text=receiveBuffer();
   if(text != NULL)
      {
         if (strcmp(text,"Name:")==0)
           {Serial.println(Name);}
         else if (strcmp(text,"Firmware:")==0)
           {Serial.println(Firmware_Nr);}
         else if (strcmp(text,"Reset:")==0)
           {memset(hardware, 0, sizeof(hardware)); Serial.println("Hadware Reset");} 
         else if (strcmp(text,"Print:")==0) 
           { 
             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); 
              }
           } 
         else if (strncmp(text,"Config:",7)==0)
 { 
                 text = text + strlen_P(PSTR("Config:")) ; 
                 int pin         = atoi(strtok(text, ",")); 
                 int vorlaufzeit = atoi(strtok(NULL, ",")); 
                 int dauer       = atoi(strtok(NULL, ",")); 
                 int Zeile       = atoi(strtok(NULL, ",")); 
    
              hardware[Zeile].pin         = pin; 
              hardware[Zeile].vorlaufzeit = vorlaufzeit; 
              hardware[Zeile].dauer       = dauer; 

              pinMode(hardware[Zeile].pin,OUTPUT); 
              hardware[Zeile].vorlaufzeit*=1000; 
              hardware[Zeile].dauer*=1000;  
              hardware[Zeile].dauer+=hardware[Zeile].vorlaufzeit; 


              Serial.print(pin); Serial.print(",");
Serial.print(vorlaufzeit); Serial.print(",");
              Serial.println(dauer);
           }
       } 

  if (digitalRead(startPin)== HIGH && Lauf == 0)   
      {    
         Lauf = 1;
                   for (int i=0;i<schritte;i++)
                      {
                        if (hardware[i].dauer>gesamtDauer) 
                          { gesamtDauer=hardware[i].dauer;} 
                      }
                              starttime=micros();
                              while (micros()-starttime<gesamtDauer) 
                              {
                                looptime=micros()-starttime; 
                                for (int i=0;i<schritte;i++)
                                {
                                  if (looptime>=hardware[i].vorlaufzeit && looptime<hardware[i].dauer)
                                    digitalWrite(hardware[i].pin,HIGH);
                                  else  
                                    digitalWrite(hardware[i].pin,LOW); 
                                }
                              }
                              // Nur zur Sicherheit nochmal alles abschalten
                              for (int i=0;i<schritte;i++)
                              {digitalWrite(hardware[i].pin,LOW);} 
    
     } 
  else if (digitalRead(startPin)== LOW) {Lauf = 0;}

}