问题和设置
我正在尝试让我的Arduino Pro Mini(带有ATmega328)通过RS232与串行设备通信。具体来说,我希望arduino最终与BKPrecision 1785B电源通信并控制其电压,电流等。
一个警告。我正在使用我的电脑(通过arduino上唯一的RS232连接)来编程和调试代码,而我的arduino只有一个串口。因此,我决定使用SoftwareSerial库设置一个额外的软件RS232端口(在数字引脚上),以便与电源通信。
到目前为止我做了什么
我尝试实现上述功能,但BK1785没有显示任何接收或理解命令的迹象。然后我将第二台计算机插入SoftwareSerial端口(而不是电源)以监控通信并确保命令已正确发送。第二台计算机(使用Docklight作为串行监视器)注意到正在接收信息,但它与发送的信息不匹配(见下文)。我只能假设我没有设置adruino来正确沟通。似乎很可能它必须是1)软件串行设置或2)我错误地广播数据。
其他信息
电源需要26个字节的数据包 Docklight设置为9600,8N1(编辑#1)
Arduino代码
这是我在Arduino上运行的简化代码。
#include <SoftwareSerial.h>
SoftwareSerial port1(4,3);
byte output[26]={170, 0, 32, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203};
void setup()
{
Serial.begin(9600);
port1.begin(9600);
digitalWrite(6,LOW); //Set ground pin on SoftwareSerial to LOW
delay(5);
}
void loop()
{
for (int i=0;i<26;i++){
port1.write(output[i]);
}
delay(10000);
}
输出和输入
我正在通过SoftwareSerial端口从arduino(参见上面的代码)广播以下26个字节(如下所示,以十进制格式显示): 170,0,32,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 203
我的第二台计算机(连接到arduino的SoftwareSerial端口)正在接收以下25个(不是26个)字节(也以十进制格式显示): 149 191 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 105
最后的想法
我已尝试在arduino中使用write和print命令,但似乎都不起作用。老实说,我不知道使用for循环发送26个字节是发送信息的正确方法。是否有更好的方法来发送字节数据包?我在网上闲逛,但我不介意一个类似的例子。 我很感激社区的任何反馈。谢谢!
修改#2
我用以下代码替换了代码中的for循环:
port1.write(output,26);
并收到一组相同的25个字节: 149 191 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 105
修改#3
我正在尝试发布示波器痕迹的图像,但我还没有10个声望点 没有数据发送时串行通信接收线是否应该是高电平?
答案 0 :(得分:0)
鉴于你的大部分都是1,你想要的是0,也许你的高低级错误。如果硬件连接看起来正确,请尝试SoftwareSerial()
构造函数中未记录的'inverse_logic'标志。
见https://github.com/arduino/Arduino/blob/master/libraries/SoftwareSerial/SoftwareSerial.cpp,第335行