2016-05-11 2 views
1

Ich möchte Ihre Hilfe, um ein wenig Code zu verstehen, der mir in meinem Projekt enorm helfen würde. Ohne zu sehr ins Detail zu gehen, hier ist das, was mir so viele Probleme verursacht:Brauchen Sie Hilfe zum Verständnis Writefile

bool Serial::WriteData(char *buffer, unsigned int nbChar) 
{ 
    DWORD bytesSend; 

    //Try to write the buffer on the Serial port 
    if(!WriteFile(this->hSerial, (void *)buffer, nbChar, &bytesSend, 0)) 
    { 
     //In case it don't work get comm error and return false 
     ClearCommError(this->hSerial, &this->errors, &this->status); 

     return false; 
    } 
    else 
     return true; 
} 

ich diese Funktion verwenden, um eine Variable zu meinem Arduino Uno über die serielle Schnittstelle wie folgt senden:

snprintf(Data, sizeof(Data) - 1, "%3.1f", (int)(pf->speedKmh)*1.0); 
SP->WriteData(Data, sizeof(Data) - 1); printf("\nData\n"); 

Einig hilfreiche Informationen:

  • speedkmh ist ein Schwimmer

  • char Daten [8] = "";

Also meine Frage ist: Ich genau wissen möchte, was mit dem Arduino gesendet wird. Im Moment weiß ich nicht wirklich, ob es ein Array sendet, Bits eins nach dem anderen, wenn es einen Float usw. sendet ... Könntest du mir helfen, das zu verstehen?

Danke!

+0

Bestimmt wollten Sie strlen (Daten) anstelle von sizeof (Daten) verwenden. Im Moment senden Sie Müll-Bytes, was immer jenseits des String-Terminators ist. Fügen Sie die Protokollierung hinzu, wenn Sie wissen möchten, was tatsächlich gesendet wird. Obwohl es unwahrscheinlich ist, den Fehler zu zeigen, ist ein Spionageprogramm für serielle Ports die bessere Waffe der Wahl. –

Antwort

0

Die folgende Zeile: snprintf (Daten, sizeof (Daten) - 1, "% 3.1f", (int) (pf-> speedKmh) * 1.0);

konvertiert Ihre Gleitkommazahl in eine Zeichenfolge (ein Array von Zeichen). Dann

SP->WriteData(Data, sizeof(Data) - 1); printf("\nData\n"); 

sendet diese Zeichen nacheinander über die serielle Schnittstelle.

BTW, ist es nicht sehr klar, warum Sie Ihren Float in eine ganze Zahl konvertieren, dann zurück zu einem Float (indem Sie es mit 1.0 multiplizieren), dann zu einer Zeichenfolge. Wie ich es sehe, würde dies den Bruchteil des Floats abschneiden und dann eine irreführende ".0" an die Zeichenkette anhängen (aus dem ".1f" -Teil der Kontrollkette). Das heißt, sowohl 1.0 als auch 1.4 werden in "1.0" umgewandelt.

Verwandte Themen