Kurtsfassung. Der Software Handshake funktioniert nicht...
aktuelles Programm sieht noch so aus:
void setup()
{
Serial.begin(9600);
}
void loop()
{
String Line = getorder(Serial);
if (Line != NULL)
{
Serial.print("Read: "); Serial.println(Line);
}
// Serial.print("#");
}
char* getorder(Stream& stream)
{
const byte XOFF = 0x13;
const byte XON = 0x11;
static byte index = 0; // Statische Zählervariable für die Zeileposition mit 0 anlegen
static const byte BUFFER_SIZE = 255; // Größe des Arryas in einer variabele festlegen
char Buffer[BUFFER_SIZE]; // Arrya für inhalt der Befelsleiste angeben
char Zeichen ='\0'; // Zeichenvariabele Leer anlegen
static boolean Kommi; // Remanenter Blockiermerker
if (stream.available() == false) stream.write(XON); // Ist der SerialBuffer Leer dann sende DC1 X-ON
while (stream.available()) // Solange noch ein Zeichen im SerialCache
{
Zeichen = stream.read(); // Lese das Nächste Zeichen ein
if (index == 0) { Kommi = false; }; // Feststellen ob ein Kommentar anfängt und Blokiermerker setzen
if (isLowerCase(Zeichen)) { Zeichen = Zeichen - 32; }; // Aus Kleinbuchstaben Großbuchstaben machen
if (isGraph(Zeichen) && index < BUFFER_SIZE - 1) // Ist das eingelesene Zeichen Druckbar und der Buffer nicht übergelaufen
{
if (Kommi == false) { Buffer[index++] = Zeichen; }; // Wenn noch nicht ein Kommentar gefunden wurde Übertrag das Zeichen in den Buffer und Zähl eins hoch
}
else if ((Zeichen == '\n' || Zeichen == '\r') && index > 0)// ist das zeichen nicht Druckbar und [( wird Newline oder Return erkannt) und es ist mindestens das 2. zeichen]
{
Buffer[index] = '\0'; // Dann setze Nullbyte als Stringende
index = 0; // Und setze Zähler auf 0
stream.write(XOFF); // Sende DC3 X-OFF
delay(5000);
return Buffer; // und gebe die ausgewertete Zeile zurück
};
if (Zeichen == ';') { Kommi = true; }; // Wird das Zeichen für Kommentar erkannt setze den Blockiermerker
};
return NULL; // Sind keine Zeichen im SerialCache dann Gebe NullByte zurück
};
Egebnis ist das Die Komplette Datei durchgesendet wird ohne bei XOFF anzuhalten.
den Delay sieht man ledeglich an der Ausgabe des Arduinos im Fenster. Read: Kommt da mit der Verzögerrung an.
Emfangs LED ist schon lange dunkel während noch Meldungen ankommen und die SendeLED noch blitzt.
Die LED'S sind auf dem Arduinobord Vorinstalliert.
Die EmpfangsLED ist durchgänig am Anfang am leuchten. das heist XOFF wird komplett ignoriert...
Ideen???