Arduino Nano SIm800L Modul String setzen und vergleichen.

Auch da gilt: werte das eigentliche Ende der Nachricht aus. Du bekommst am Anfang und am Ende ein CR + LF. Frage auf das LF ab. Nach dem zweiten LF ist Ende. Dann weißt du dass du fertig bist. Da nach dem Senden eine zeitlang zu warten ist völlig unnötig. Außerdem hängt diese Zeit von der Baudrate und der Anzahl der Zeichen ab und ist damit nicht konstant

Dann kann man bei jedem loop() Durchlauf abfragen ob was im seriellen Eingangspuffer ist. Wenn ja liest man das Zeichen aus. Wenn nein macht man nichts oder was anderes.
Hier ist ein einfaches Programm um was vom seriellen Monitor einzulesen bis ein LF kommt:
https://forum.arduino.cc/index.php?topic=622530.msg4217397#msg4217397

readLine() ist das relevante. Was in loop() steht ist größtenteils Auswertung. Da ist bei dir anders.
Und nicht von der while() Schleife verwirren lassen. i.d.R. wenn nichts blockiert wird nur ein Zeichen pro Aufruf ausgelesen. Deshalb muss man die Funktion in loop() ständig aufrufen

Man kann auch noch einen Zustands-Automaten bauen und zwischen Senden und Empfangen umschalten. Und dann nur Abfragen ob was da ist wenn man vorher was gesendet hat

Allgemein:
Verwende globale Variablen nur wenn wirklich nötig. Ansonsten lokale. Außerdem werden globale Variablen automatisch mit 0 initialisiert