Hallo,
du wartest nicht wirklich. Du verzögerst nur das einlesen von der seriellen mit dem delay. Du fragst ja sofort nach senden den Empfang ab und wenn da nichts ist schlägt es fehl. Du musst nachdem senden die serielle permanent abfragen und darfst hier keine Fehlermeldung erstellen. Denn du weiß nicht wann die Antwort kommt.
Du kannst dir nachdem senden eine Zeit merken, fragst immer die serielle ab und lässt parallel noch eine Timeout laufen. Entweder kommt innerhalb des Timeouts eine Antwort oder das Timeout schlägt zu.
So mache ich das jedenfalls zusammen mit einem Zustandsautomaten.
Sendezustand, wechselt nach dem senden in den Empfangszustand womit auch das Timeout aktiv wird.
Danach wechselt es wieder in den Sendezustand. Oder vorher wird das Timeout behandelt.
Edit:
auch solltest du die Einlesefunktion trennen. Erst wenn die reine serielle Einlesefunktion ein okay zurück gibt, kann die Antwort ausgewertet werden.