沒有統一C#或Arduino的C/C在你的問題提供這樣你只會得到一個建議++代碼。
。使用線程從Unity端的串行讀取。在Unity中嘗試此操作之前,您必須先了解C#Thread,否則您將面臨許多其他問題。
。避免在接收數據時在Arduino或Unity端執行字符串連接(oldString + = newString)。不這樣做會隨着時間的推移而減慢。
。優化您如何從Arduino發送和接收數據。在Arduino一側使用字節數組而不是字符串。
從鏈路張貼在你的問題的Arduino編碼器代碼的例子,它看起來像這樣的事情:
Serial.print("Left = ");
Serial.print(newLeft);
Serial.print(", Right = ");
Serial.print(newRight);
這不是很好。假設你有編碼器。 Front Left,Front Right,Back Left and Back Right編碼器。從每個編碼器獲取這些值。如果值爲正數,則將其縮放至0,127。如果值爲負數,則將其從當前值縮放到-1,-127。使用Map功能可輕鬆完成縮放。
創建一個無符號字符數組或使用字節數組併爲其分配每個縮放值;
byte encoders[] = {0, 0, 0, 0}; //4 Encoders
encoders[0] = valueOfScaledFrontLeftEncoder;
encoders[1] = valueOfScaledFrontRightEncoder;
encoders[2] = valueOfScaledBackLeftEncoder;
encoders[3] = valueOfScaledBackRightEncoder;
然後同時身體爲字節
Serial.write(encoders, sizeof(encoders));
的陣列發送它們現在,在統一的接收器側,4個字節將在順序到達。閱讀並按發送順序提取值。這節省了Arduino的時間,並提高了接收和發送速度。沒有更多發送長字符串!
。如果全部失敗,請從Arduino Maega更改爲Arduino截止日期。它速度非常快,因爲它使用ARM處理器。請注意,它使用3.3伏而不是伏。所以請確保購買3.3 v編碼器或使用5v至3.3降壓。
Wifi還是串口? – Programmer
1/2秒滯後?我懷疑你在Unity方面犯了一些明顯的錯誤。你是否簡單地「模擬」了輸入以檢查你沒有在上游做出一些基本的錯誤? – Fattie