Serielle Schnittstelle Auslesen probleme

so habe gemerkt das ich das Falsche Programm eingearbeitet habe :frowning: sch.....
jetzt ist das Richtige drin.
Jetzt kann man bei einem Duchgang jede Hadware belibig offt ansteuern also Ein und Ausschalten lassen :slight_smile:
die Fehlerabfrage habe ich auch mit eingebaut und bei einem Fehler kommt nun eine Fehlermeldung und nicht die Prüfantwort.
jetzt kann ich mich dran machen und ein Freebasic Programm dafür zu schreiben das sich mit dem Arduino unterhalten kann :slight_smile:

man bin ich gerade Froh das der teil fertig ist :slight_smile:

Hier noch mal der Code volständig mut Fehlerausgabe:

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

Wenn ein fehler auftrit bei der Übertragung der Seriellen schnitstelle antwortet das Bord mit Fehler 
*/

        #define ZEILENTRENNZEICHEN 13
    int startPin           = 2;
   char Firmware_Nr[]      = "1.2.0";
   char Name[]             = "Tropfen Box";
    int Baudrate           = 9600;
    int Lauf               = 0;

    struct hardware_t{int pin;long vorlaufzeit; long dauer;};              // Struktur einer einzelnen Schaltzeit
    struct schaltzeit_t{int pin;long zeit; boolean geschaltet;};           // Struktur einer einzelnen Schaltzeit

    hardware_t hardware[201]=
{                                              // Vorlaufzeit und Dauer für die Hardware
  {3, 10000,  30000},
  {3, 500000, 30000},
};

    #define schritte sizeof(hardware)/sizeof(hardware[0])


    schaltzeit_t schaltzeiten[2*schritte];
    int anzahlSchaltzeiten;
    long geschalteteZeit[2*schritte];
    void sortSchaltzeiten(int n) 
    {
      schaltzeit_t temp;
      for(int x=0; x<n; x++) 
      {
        for(int y=0; y<n-1; y++) 
        {
          if (schaltzeiten[y].zeit>schaltzeiten[y+1].zeit) 
          {
            temp=schaltzeiten[y+1];
            schaltzeiten[y+1]=schaltzeiten[y];
            schaltzeiten[y]=temp;
          }
        }
      }
    }


    // 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() 
  {
    pinMode(startPin, INPUT);
    Serial.begin(Baudrate);
  }  

void loop() {  
  unsigned long starttime;
  unsigned long looptime;


   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);
                }
             } // Print
           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, ","));
      
                if (pin > startPin && pin < 21 && Zeile > -1 && Zeile < 200) 
                  {   
                    hardware[Zeile].pin         = pin;
                    hardware[Zeile].vorlaufzeit = vorlaufzeit;
                    hardware[Zeile].dauer       = dauer;
      
                    hardware[Zeile].vorlaufzeit*=1000;
                    hardware[Zeile].dauer*=1000;
      
                    Serial.print(pin); Serial.print(",");
                    Serial.print(vorlaufzeit); Serial.print(",");
                    Serial.println(dauer);
                   }
                 else 
                   { Serial.println("Fehler: Werte komnten nicht eingetragen werden."); }
             } // Config                                 
          else { Serial.println("Fehler: Befehl nicht bekannt"); }
          
         } // if(text != NULL)
  
     if(digitalRead(startPin)== HIGH && Lauf == 0)
        {
          Lauf = 1;
          anzahlSchaltzeiten=0;
          for (int i=0;i<schritte;i++)
          {
            pinMode(hardware[i].pin,OUTPUT);
            if (hardware[i].dauer>0)
            {
              schaltzeiten[anzahlSchaltzeiten].pin=hardware[i].pin;
              schaltzeiten[anzahlSchaltzeiten].zeit=hardware[i].vorlaufzeit;
              schaltzeiten[anzahlSchaltzeiten].geschaltet=true;
              anzahlSchaltzeiten++;
              schaltzeiten[anzahlSchaltzeiten].pin=hardware[i].pin;
              schaltzeiten[anzahlSchaltzeiten].zeit=hardware[i].vorlaufzeit+hardware[i].dauer;
              schaltzeiten[anzahlSchaltzeiten].geschaltet=false;
              anzahlSchaltzeiten++;
            }
          }
            starttime=micros();
            for (int i=0;i<anzahlSchaltzeiten;i++)
            {
              while ((looptime=micros()-starttime)<schaltzeiten[i].zeit);
              digitalWrite(schaltzeiten[i].pin,schaltzeiten[i].geschaltet);
            }
        }
     else if (digitalRead(startPin)== LOW) {Lauf = 0;}
  }