我需要将一些数字序列发送到微控制器。这里是我的功能:将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()',因为它会停留在第一个字符值为零。 –