-2

我需要向微控制器发送一些数字序列。这是我的功能:

void DriveForward()
{       
      printf("137 0 0 128 0");          
}

当我的函数作为 ASCII 发送时,微不接受 ASCII。我需要将该 ASCII 字符串作为uint8. 知道如何进行转换吗?

在这种情况下,printf不会在屏幕上打印,而是直接发送到串口。它是唯一发送到串口的命令,所以我需要事先进行一些转换。

4

2 回答 2

4

我可能对你的问题感到困惑,但你可以尝试类似的事情(只是为了测试这种情况):

  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);
于 2012-12-17T00:33:56.013 回答
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. 出于历史原因,我不会删除此答案。

于 2012-12-17T00:36:44.090 回答