我需要将一些数字序列发送到微控制器。这是我的功能:
void DriveForward()
{
printf("137 0 0 128 0");
}
当我的函数以ASCII格式发送时,micro不接受ASCII。我需要将该ASCII字符串发送为uint8
。我知道如何进行转换?
在这种情况下,printf
不会在屏幕上打印,而是直接发送到串行端口。它是发送到串口的唯一命令,因此我需要事先进行一些转换。
答案 0 :(得分:4)
我可能会对您的问题感到困惑,但您可以尝试类似的事情(仅针对此案例进行测试):
printf("%c%c%c%c%c", 137, 0, 0, 128, 0);
这将发送四个用ASCII编码的字符,并带有您之后输入的数值。
此外,大多数技术文档告诉您应该使用uint8
,这是指您向电缆发送一个完整的8位值(在这里说字符或ASCII然后不适用。它们只是可以使用unit8
表示的8位值。
通常如何使用write
之类的低级函数来发送uint8
的缓冲区,因此,如果必须发送该值,则可以使用像这样的缓冲区:
uint8 send_buffer[] = {137, 0, 0, 128, 0};
然后:
write (send_buffer, 5, output_file_or_serial_conn);
答案 1 :(得分:0)
如果您无法更改功能,请尝试使用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
的倒数。
我不是因为历史原因而删除这个答案。