SoftwareSerial与Arduino的RS232设备通信

时间:2014-01-22 20:56:42

标签: serial-port arduino

问题和设置

我正在尝试让我的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个声望点 没有数据发送时串行通信接收线是否应该是高电平?

1 个答案:

答案 0 :(得分:0)

鉴于你的大部分都是1,你想要的是0,也许你的高低级错误。如果硬件连接看起来正确,请尝试SoftwareSerial()构造函数中未记录的'inverse_logic'标志。

https://github.com/arduino/Arduino/blob/master/libraries/SoftwareSerial/SoftwareSerial.cpp,第335行