使用Arduino与RS232设备进行软件通信



问题和设置

我正在尝试通过RS232与串行设备进行通信。具体来说,我希望Arduino最终与Bkprecision 1785B电源和控制电压,电流等进行通信。

一个警告。我正在使用我的计算机(通过Arduino上唯一的RS232连接)来编程和调试代码,而我的Arduino只有一个串行端口。因此,我决定使用软件库来设置额外的软件RS232端口(在数字引脚上)与电源进行通信。

我已经做了什么日期

我尝试实现上述内容,但是BK1785没有显示任何接收或理解命令的迹象。然后,我将第二台计算机插入了软件端口(而不是电源),以监视通信,并确保命令已正确发送。第二台计算机(使用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);
}

输出和输入

我从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、0、0、0、0、0、0、0,0,0203

我的第二台计算机(连接到Arduino的软件端口)正在接收以下25(不是26个)字节(也以DEC。Format显示):149 191 253 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 105

最终想法

我尝试使用Arduino中的写入和打印命令,但似乎都没有用。老实说,我不知道使用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 255 255 255 255 105

编辑#3

我正在尝试发布示波器痕迹的图像,但我还没有10个声誉点。
当没有发送数据时,串行通信接收线是否应该很高?

鉴于您大部分是要0的位置,所以也许您的高级别错误。如果硬件连接看起来正确,请尝试使用SoftwareSerial()构造函数中的无证件的" Inverse_logic"标志。

请参阅https://github.com/arduino/arduino/blob/master/libraries/softwareserial/softwareserial.cpp,第335行

最新更新