向串行端口发送和接收 int 值
Sending and receiving int value to/from serial port
我正在开发一个窗口的应用程序,该应用程序通过串行端口向Arduino发送和接收数据。
我遇到的问题是当我尝试将 int 值发送到串行端口并在 Arduino 程序中拾取它时。我正在使用窗口程序中的WriteFile()
来发送int并使用Serial.parseInt()
在Arduino中拾取它。当我发送字符值时,我可以毫无问题地拾取它们。
如果我想发送 int 值,我唯一一次在 arduino 中收到整数是如果我发送整数 48 到 57,这给了我一个 0 到 9 的整数值,这是十进制 48 到 57 的 ASCII 字符,很奇怪。 例如 57,Arduino 似乎将其拾取为 9,这是 ASCII 57 的字符值。
下面是Windows程序和Arduino中的代码
C++代码:
DWORD ComPort::WriteAnalogData(int *buffer)
{
if (!connected)
return 0;
DWORD bytesSent;
DWORD errors;
if (!WriteFile(hCom, (void *)buffer, sizeof(buffer), &bytesSent, 0))
ClearCommError(hCom, &errors, NULL); // If it fails, clear com errors
else return bytesSent; // Return the number of bytes sent
return 0; // Or return 0 on failure
}
写入 int 后的返回值(bytesSent) 是 4,所以我认为这个函数可以工作。我有一个类似的功能来发送单个字节的数据,它可以正常工作,Arduino可以正常地拾取数据
Arduino 代码:
int scadaAnalogVal;
scadaAnalogVal = Serial.parseInt();
digitalWrite(scadaAnalogVal,HIGH);
谁能告诉我发生了什么。可能很简单,但我看不出问题是什么,谢谢。
Arduino parseInt() 方法在 Arduino 架构中具有长返回类型(32 位)。 我认为您应该将Arduino代码更改为:
long scadaAnalogVal;
ParseInt 文档
相关文章:
- Qt Q串行端口未编程设备未关闭
- 在 linux c++ 中没有通过串行端口发送的数据
- 检查串行端口Linux中是否有传入数据(cbInQue for linux)
- 在不传输的情况下更改 Win32 中的串行端口波特率
- 增强 ASIO 和串行端口异步读取
- 串行端口写入究竟如何从缓冲区实际写入数据?
- 如何将参数这些串行端口传递到函数中
- 从 C/C++ 访问 Android 中的串行端口
- Qt两个串行端口发送和接收
- 通过串行端口从GPS传感器读取
- 提升 asio 串行端口"end of file"
- 通过串行端口发送多个值
- 与QSerialPort配合使用的串行端口仿真
- 如何通过boost::asio和shared_ptr创建串行端口
- 串行端口编码
- 使用来自串行端口的字符串数据来操作振镜扫描仪在更高的速度下会出错
- 写入和读取十六进制 TRAM QT 串行端口
- 向串行端口发送和接收 int 值
- 如何通过C 的串行端口发送INT
- 描述通过串行端口传入的数据;将位解析为 int 或 float 等类型