Keine Einheit C# oder Arduino C/C++ Code in Ihrer Frage zur Verfügung gestellt, so dass Sie einen Rat nur erhalten werden.
. Verwenden Sie Thread, um von der seriellen Seite auf der Unity-Seite zu lesen. Sie müssen C# -Thread verstehen, bevor Sie dies in Unity versuchen, oder Sie werden mit vielen anderen Problemen enden.
. Vermeiden Sie String-Verkettungen (oldString + = newString) auf der Arduino- oder Unity-Seite, wenn Daten empfangen werden. Wenn Sie dies nicht tun, verlangsamen Sie sich im Laufe der Zeit.
. Optimieren Sie, wie Sie Daten vom Arduino senden und empfangen. Verwenden Sie Bytearray auf der Arduino-Seite anstelle von String.
Aus dem Beispiel von Code Arduino-Encoder in Verbindung in Ihrer Frage gestellt, es sieht aus wie etwas wie folgt aus:
Serial.print("Left = ");
Serial.print(newLeft);
Serial.print(", Right = ");
Serial.print(newRight);
Das ist nicht gut. Nehmen wir an, Sie haben Encoder. vorne links, vorne rechts, hinten links und Hinten Rechts Encoder. Holen Sie sich diese Werte von jedem Encoder. Wenn der Wert positiv ist, skalieren Sie ihn auf 0,127. Wenn der Wert negativ ist, skalieren Sie ihn von seinem aktuellen Wert auf -1, -127. Die Skalierung kann einfach mit der Map Funktion durchgeführt werden.
Erstellen Sie ein vorzeichenloses char-Array oder verwenden Sie ein Byte-Array und weisen Sie jedem skalierten Wert einen Wert zu;
byte encoders[] = {0, 0, 0, 0}; //4 Encoders
encoders[0] = valueOfScaledFrontLeftEncoder;
encoders[1] = valueOfScaledFrontRightEncoder;
encoders[2] = valueOfScaledBackLeftEncoder;
encoders[3] = valueOfScaledBackRightEncoder;
Dann sie bei thesame Zeit als Array von
Serial.write(encoders, sizeof(encoders));
Jetzt Bytes senden, auf der Empfängerseite in der Einheit, die 4 Bytes in Reihenfolge ankommen. Lesen Sie sie und extrahieren Sie die Werte in der Reihenfolge wie gesendet. Dies spart Zeit auf dem Arduino und erhöht die Empfangs- und Sendegeschwindigkeit. KEINE mehr langen STRINGS!
. Wenn alles fehlschlägt, wechseln Sie von Arduino Maega zu Arduino Due. Es ist sehr schnell, weil es ARM-Prozessor verwendet.Beachten Sie, dass 3,3 Volt anstelle von Volt verwendet wird. Stellen Sie also sicher, dass Sie einen 3.3 Encoder und 5v zu 3.3 V Step-down kaufen.
Wlan oder Seriell? – Programmer
1/2 Sekunde Verzögerung? Ich vermute, Sie haben auf der Unity-Seite einfach einen Fehler gemacht. Haben Sie einfach die Eingabe "simuliert", um zu überprüfen, dass Sie keinen grundlegenden Fehler upstream gemacht haben? – Fattie