我需要將一些數字序列發送到微控制器。這裏是我的功能:將ASCII轉換爲uint8
void DriveForward()
{
printf("137 0 0 128 0");
}
微不接受ASCII,而我的功能作爲ASCII發送。我需要發送該ASCII字符串爲uint8
。任何想法我怎麼能做轉換?
在這種情況下,printf
不在屏幕上打印,而是直接發送到串口。它是唯一發送到串口的命令,所以我需要事先做一些轉換。
我需要將一些數字序列發送到微控制器。這裏是我的功能:將ASCII轉換爲uint8
void DriveForward()
{
printf("137 0 0 128 0");
}
微不接受ASCII,而我的功能作爲ASCII發送。我需要發送該ASCII字符串爲uint8
。任何想法我怎麼能做轉換?
在這種情況下,printf
不在屏幕上打印,而是直接發送到串口。它是唯一發送到串口的命令,所以我需要事先做一些轉換。
我可以用你的問題相混淆,但你可以嘗試類似(只是針對這種情況進行測試):
printf("%c%c%c%c%c", 137, 0, 0, 128, 0);
這將發送在ASCII你把以後的數值編碼四個大字。
此外,大多數技術文檔告訴你,你應該使用uint8
指的是你發送到電纜一個完整的8位值(說到這裏的字符或ASCII然後不適用,它們只是8的值可以使用unit8
來表示的位)。
如何這通常是通過使用一些低級別的功能,如write
,可以發送的uint8
的緩衝,所以,如果你要發送的值,你可以有這樣的緩衝:
uint8 send_buffer[] = {137, 0, 0, 128, 0};
然後:
write (send_buffer, 5, output_file_or_serial_conn);
太棒了!這工作! –
如果你不能改變你的功能,嘗試用scanf
接收,它是printf
倒數,所以如果你的代碼看起來是這樣的:
printf("%i %i %i", value1, value2, value3);
然後像這樣的東西接受它:
char value1, value2, value3;
sscanf(received_string, "%i %i %i", &value1, &value2, &value3);
編輯: 2年後,我重新審視這個答案,我不那麼肯定scanf
是printf
倒數。 由於歷史原因,我不刪除此答案。
ASCII是一種文本編碼。 'uint8'不是。這是一種數據類型。您將不得不告訴我們控制器所期望的文本編碼。 –
你看過atoi()嗎? http://www.cplusplus.com/reference/cstdlib/atoi/ – HeavenAgain
你的意思是代替字符「137」,你想傳遞一個值爲137的字符(字節)?如果是這樣,你不能使用'printf()',因爲它會停留在第一個字符值爲零。 –