问题和设置
我正在尝试通过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行