【问题标题】:Arduino convert ascii characters to stringArduino 将 ascii 字符转换为字符串
【发布时间】:2015-12-14 13:48:29
【问题描述】:

我正在将此传感器与 arduino 板一起使用。

在第 2 页,它描述了引脚 5 的串行输出。

http://www.maxbotix.com/documents/HRXL-MaxSonar-WR_Datasheet.pdf

输出是一个 ASCII 大写“R”,后跟四个 ASCII 字符 以毫米为单位表示范围的数字,后跟一个小车 返回(ASCII 13)。串行数据格式为 9600 波特,8 个数据位,无奇偶校验, 一个停止位 (9600-8-N-1)。

这是我的 arduino 代码(不正确)。它只输出'82',即大写R。

void setup()
{  
 Serial.begin(9600);
}

void loop()
{  
 int data = Serial.read();
 Serial.println(data);
 delay (1000);
}

如何获取字符串的距离读数?

非常感谢

【问题讨论】:

  • 对不起,但是.. 你把传感器安装在哪里了?因为我看到您使用相同的串行端口进行读取和写入...如果您只是将传感器的 TX 电缆插入 arduino 的 RX 电缆,这可以工作,但是您无法从 PC 读取.我建议您使用传感器的软件串行库,然后使用示例here(只需设置正确的波特率)

标签: string arduino ascii


【解决方案1】:

你试过readBytesUntil方法吗?

你应该使用它like that

byte DataToRead [6];
Serial.readBytesUntil(char(13), DataToRead, 6);

您的数据包含在 DataToRead 中(DataToRead[0] 中的“R”等)

【讨论】:

  • 感谢您的回复。那太棒了。所以这会打印出实际距离。 void setup() { Serial.begin(9600); } void loop() { byte DataToRead [6]; Serial.readBytesUntil(char(13), DataToRead, 6); int data = DataToRead [1:4]; Serial.println(data); delay (1000); }
  • 您可以尝试将 4 个字节放入一个整数,但我不确定它是否有效。否则你可以尝试这样的事情:union { // declared above setup{} byte b[4]; int i; } tmp; 在你的循环中:tmp.b[0]=DataToRead[1]; tmp.b[1]=DataToRead[2]; tmp.b[2]=DataToRead[3]; tmp.b[3]=DataToRead[4]; data = tmp.i;
【解决方案2】:

当我读到它时,问题是: 如何将字符的字节(ascii)表示形式转换为可读的字母数字字符,例如“a”与 97?

实际问题:Arduino 将 ascii 字符转换为字符串。 为什么人们会发布不回答问题的回复?

不是确切的答案,但使用 (char) 进行投射会让您顺利到达目的地。

char inByte  = 0;
inByte = (char)Serial.read();  // ascii 97 received
Serial.println((char)inByte); // => prints an 'a' without the quotes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2011-01-13
    • 2016-03-02
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多