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:
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++;
}
}
(Aber ungetestet - sprich Tippfehler garantiert vorhanden^^)
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