我需要向微控制器发送一些数字序列。这是我的功能:
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
. 出于历史原因,我不会删除此答案。