Herzlich willkommen im RN :-D
Ich schätze, das dauert so lange, weil der andere µC so langsam sendet, bzw. UART nicht unbedingt sehr schnell ist, wenn man Übertragungsfehler vermeiden möchte.
Ich würds z.B. so machen:
(Aber ungetestet - sprich Tippfehler garantiert vorhanden^^)Code:#define StringStatus_bereit 0 #define StringStatus_empfange 1 #define StringStatus_bitteabholen 2 // Die drei Variablen global deklarieren char inString[21]; int inCount; char StringStatus = StringStatus_bereit; // Sagt dir, ob im Moment noch der String empfangen wird, oder ob er schon fertig ist void srf02_serial() { if ((StringStatus = StringStatus_bereit) && (Serial.available()==0)) // Falls bereit und Daten anliegen... { StringStatus = StringStatus_empfange; // ...wird der Status auf "empfange" gesetzt inCount = 0; // Und der Zähler zurückgesetzt } while((StringStatus == StringStatus_empfange) && (Serial.available()==0)) // Falls mit Empfangen beschäftigt und Daten anliegen { inString[inCount] = Serial.read(); // Werden die Daten in den String geschrieben if((inString[inCount]==13) || (inCount >= 18)) // Falls dein Enter(?)-Zeichen kommt oder der String schon voll ist... { inString[19] = 0; // ...am Ende ein Stringende-Zeichen setzten... StringStatus = StringStatus_bitteabholen; // ...und sagen dass die Übertragung fertig ist und die Daten abgeholt werden können } inCount++; } }
Allerdings muss dann die Sub bei jedem durchlauf der Hauptschleife aufgerufen werden. Sobald in StringStatus StringStatus_bitteabholen drinsteht, kannst du die Daten des Strings verarbeiten. Sobald du fertig bist musst du den StringStatus aber wieder auf StringStatus_bereit setzten, sonst wartet die Sub nur bis du endlich fertig bist.
Viele Grüße
-schumi-
Lesezeichen