Meiner ansicht nach gehst du etwas falsch ran an die Sache. Du hofft dass wenn du ReadByte aufrufst das richtige Byte auch da ist. Aber wer sagt dass der Roboter zu dem Zeitpunkt zu dem du ReadByte aufrufst schon das passende Byte gesendet hat (Außerdem müsstest du auch noch einen Fehler aufgrund eines Threadübergreifenden vorgangs bekommen, da du ohne invoke aus einem anderen Thread auf die Gui zu greifs). Da du sowie so schon mit dem DataRecievedEvent arbeitest würde ich vorschlagen du schickst vom Roboter aus erst mal ein bestimmtes Byte als Startbedingung. Wenn das Empfangen wurde schreibst du jedes weitere byte, das danach kommt in eine liste bis deine Endbedingung kommt. In der Liste weist du dann dass z.B. das erste Byte für die Geschwindigkeit und das zweite Byte dann für die Rundenzeit steht.
Code mäßig könnte das ganze im RecievedEvent so aussehen:
//Globale Variable
bool PaketStart = false;
//Event
byte temp = 0;
while(temp != -1)
{
temp = (byte)serialPort1.ReadByte();
if(PaketStart)
{
if(temp == Endbedingung)
{
//Rufe eine Prozedur auf die die Daten in der Liste verarbeitet
}
Liste.Add(temp);
}
if(temp == StartBedingung)
{
PaketStart = true;
}
}
Lesezeichen