Sim800l Rückgabe

Hallo ich will mit meinem Sim 800l eine Verbindung aufzubauen. Allerdings bekomme ich mit diesem Script hier keine wirklich ordentliche Rückgabe im Seriellen Monitor und wollte jetzt fragen ob ihr eine Idee habt wie ich das verbessere?
Code:

#include <SoftwareSerial.h>
#define SIM800_TX 8
#define SIM800_RX 9
SoftwareSerial serialSIM800(SIM800_TX, SIM800_RX);

String data1 = "123";   
String data2 = "test";   
int startgsm = 1;

void setup() {
  //Start der seriellen Kommunikation
  Serial.begin(9600);
  while (!Serial);
  serialSIM800.begin(9600);
  delay(1000);
  Serial.println("Bereit");
}

void loop() {
  //Ausgabe von SIM800 lesen und ausgeben
  if (serialSIM800.available()) {
    Serial.write(serialSIM800.read());
  }
  //Eingaben vom Terminal an den SIM800 senden
  if (Serial.available()) {
    serialSIM800.write(Serial.read());
  }
  if (startgsm == 1) {
    Serial.println("Gsm Modul wurde gestartet");
    gsm();
    startgsm = 2;
  }
}

void gsm() {
  serialSIM800.println("AT");
  tell();
  gsm2();
}

void gsm2() {
  serialSIM800.println("AT+SAPBR=3,1,Contype,GPRS");
  tell();
  gsm3();
}
void gsm3() {
  serialSIM800.println("AT+SAPBR=3,1,APN,web.vodafone.de");
  tell();
  gsm4();
}
void gsm4() {
  serialSIM800.print("AT+SAPBR=3,1,USER,vodafone");
  tell();
  gsm5();
}
void gsm5() {
  serialSIM800.println("AT+SAPBR=3,1,PWD,vodafone");
  tell();
}

void tell() {
    //Ausgabe von SIM800 lesen und ausgeben
  if (serialSIM800.available()) {
    Serial.write(serialSIM800.read());
  }
}

Antwort im Seriellen Monitor:

Bereit
Gsm Modul wurde gestartet
ATAT+SAPBR=3,1,Contype,GPRSAT=3,1,APN,web.vodafone.deAT+SAPBR=3,1,USER,vodafoneAT+SAPBR=3,1,PWD,vodafone
OK

ERROR

+CPIN: READY

Call Ready

SMS Ready

Was heißt den "keine ordentliche Rückgabe" ?

Ist dein Sim800 eingebucht ?
Hast du ein stabiles Netz ?

Ja das hab ich, aber ich mein das was auf dem Monitor angezeigt wird ist ja momentan alle Befehle und dann alle Antworten so das man nichts zuordnen kann. Das soll Befehl Antwort Befehl Antwort ... sein.

Hypec:
Ja das hab ich, aber ich mein das was auf dem Monitor angezeigt wird ist ja momentan alle Befehle und dann alle Antworten so das man nichts zuordnen kann. Das soll Befehl Antwort Befehl Antwort ... sein.

Ok....habe mir deinen Sketch mal angesehen.
Du lässt dem SIM800 ja auch keine Zeit entsprechend zu antworten.
Mach das doch mal nur mit einem Befehlsstring.
Erst wenn der beantwortet wurde, den nächsten String.

Also wenn ich ein Delay einbaue an jeglichen stellen und mit jeglichen Deltas, dann wird der Befehl nicht mehr ausgeschrieben.

Hypec:
Also wenn ich ein Delay einbaue an jeglichen stellen und mit jeglichen Deltas, dann wird der Befehl nicht mehr ausgeschrieben.

Das hatte ich auch nicht geschrieben.
Du musst die Sim abfragen, ob der erste String gesendet worden ist, wenn ja, den zweiten senden, usw.

Kannst du mir vlt sagen wo ich dazu ein Code Beispiel finde meine C Kentnisse sind leider ziemlich miserabel.