我一直在試圖用遊戲「Assetto Corsa」中的汽車速度驅動Arduino舵機。我設法使用共享內存從遊戲中提取實時數據,並試圖通過串行端口將它發送到Arduino。從字符串中提取信息
我還沒有設法表示汽車在伺服上的實際速度,我想知道爲什麼。我很確定問題來自於Arduino Code,我可以提取汽車的速度,但我不確定如何正確使用它。也許你可以幫忙?
這是Arduino的代碼片段:
char inData[8];
char inChar; // Where to store the character read
byte index = 0; // Index into array; where to store the character
int angle = 0;
int newAngle = 0;
int MaxChars = sizeof(inData);
char ch;
while (Serial.available())
{
char ch = Serial.read();
Serial.write(ch);
if (index < MaxChars && isDigit(ch))
{
inData[index++] = ch;
}
else
{
inData[index] = 0;
newAngle = atoi(inData);
Serial.write(newAngle);
if (newAngle > 0 && newAngle < 180)
{
if (newAngle < angle)
for (; angle > newAngle; angle -= 1)
{
myServo.write(angle);
}
else
for (; angle < newAngle; angle += 1)
{
myServo.write(angle);
}
}
index = 0;
angle = newAngle;
delay(1000);
}
}
這是我使用從遊戲中提取信息,並將其發送到Arduino代碼:
while (true)
{
snprintf(Data, sizeof(Data)-1, "%3.3f", pf->speedKmh);
SP->WriteData(Data, sizeof(Data));
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
int readResult = SP->ReadData(inData, sizeof(inData));
printf("\t Bytes read: %i\n",readResult);
for (int i = 0; i < sizeof(inData); i++)
{
printf("%i", inData[i]);
inData[i] = 0;
}
}
這是來自
的回顯截圖Serial.write(NewAngle);
我用黃色概述了汽車的速度。我的問題是:如何從我收到的數據中提取此速度以便與Arduino伺服器一起使用?
非常感謝!
---------- ---------- UPDATE
它的工作原理!非常感謝,這是我改變的:
snprintf(Data, sizeof(Data)-1, "%3.3f", (int)(pf->speedKmh)*1.0);
將速度鑄造成一個int並乘以1.0。這似乎已經成功了! 「不知道爲什麼它不起作用,改變一些東西,不知道它爲什麼起作用!」
'inData'的內容是什麼? newAngle'的類型和價值是什麼?預期輸出是什麼(可以將實際輸出複製粘貼爲文本而不是圖像)? –
@JoachimPileborg 'inData'收到什麼 'WriteData' 發送給它。用於此目的的庫可在[here]找到(http://playground.arduino.cc/Interfacing/CPPWindows)。 我已編輯帖子以包含Arduino代碼的變量聲明。 我不確定如何獲得文本輸出,這就是爲什麼我截圖:/ – Frazic
我用來提取數據的共享內存庫可以在這裏找到(http://www.assettocorsa.net/forum /index.php?threads/shared-memory-reference-31-03-2016.3352/) – Frazic