Can';t从arduino发送RS-232命令以进行工作
从Arduino Mega向ENTTEC DMXStreamer发送RS-232命令时出现问题。RS-232 API位于此处。我试图发送3个命令H1(停止显示)HA(插槽A中的加载显示)H0(加载的开始显示)。我尝试了多种方法来发送数据Can';t从arduino发送RS-232命令以进行工作,c,arduino,serial-port,embedded,serial-communication,C,Arduino,Serial Port,Embedded,Serial Communication,从Arduino Mega向ENTTEC DMXStreamer发送RS-232命令时出现问题。RS-232 API位于此处。我试图发送3个命令H1(停止显示)HA(插槽A中的加载显示)H0(加载的开始显示)。我尝试了多种方法来发送数据 setup(){ Serial2.begin(9600); //default baud rate of DMXStreamer Serial.begin(115200); } loop(){ Serial2.print("H1
setup(){
Serial2.begin(9600); //default baud rate of DMXStreamer
Serial.begin(115200);
}
loop(){
Serial2.print("H1HAH0");
delay(3000);
}
我也试过了
Serial2.write(0x48);
Serial2.write(0x31);
Serial2.write(0x48);
Serial2.write(0x41);
Serial2.write(0x48);
Serial2.write(0x30);
我从DMXStreamer得到的所有回报都是“”。我甚至不认为这些字符是API中可能的响应代码。成功的发送应返回“!”否定的回答是“?”
这是我用来读取响应的代码
String Message = "";
while(Serial2.available())
{
char inChar = Serial2.read();
Message += inChar;
}
Serial.println(Message);
然后,我将usb到串行转换器连接到DMXStreamer,并使用Realterm发送数据。我转到Realterm中的“发送”选项卡,在框中键入“H1HAH0”,然后按下“发送ASCII”按钮。拖缆返回肯定响应!!!我得到了预期的结果,DMX在插槽A中的显示开始播放
我在发送数据时做错了什么。作为旁注,我一度希望使用命令H3101而不是H0。下面是API中命令的注释。我不知道如何根据注释发送命令的101部分。任何帮助都将不胜感激
来自API
H命令
此命令用于启动、停止节目并将节目设置为运行
- H0命令,开始显示格式H0
- H1命令,停止显示该命令将停止显示
- H3命令,以循环时间开始显示
节目将永远循环。字节在9600波特时通信速度很慢。在它们到达之前,您将看到它们之间的
available()
0。使用Serial2.readString()
进行测试。它等待下一个字节直到一秒钟
String Message = Serial2.readString();
Serial.println(Message);
注意:这是一个测试。不要在最终草图中使用String或readString。使用指定长度或终止符的C字符串和readBytes。您是如何将此RS232设备连接到Arduino的?你知道远程现代化的Arduino不会说RS232,会被RS232电压水平损坏,对吗?即使在过去的日子里,我很确定那些有RS232端口而不是USB的型号只有一个这样的端口,我不知道。这可能就是它不起作用的原因。我直接从RS-232设备连接到Serial2的串行端口引脚。所以我需要一些防护罩。谢谢你的评论,这将使我在试图弄清楚发生了什么时省去很多挫折。是的,你需要一个反向RS232电平移位器,可能是带有MAX232或其众多后代或替代品的东西。希望您的Arduino能够幸存下来,但请注意这些特定的引脚可能已损坏。一个简单的问题是,如果问题是信号电平,那么当我使用usb到串行转换器时,为什么它能工作?这些设备是否通常内置一个电平移位器,可与低电压(5v)以及RS-232电平信号一起工作?因为我能用同样的USB到串行转换器与我的5v Arduino通信。在你准确记录你所拥有的之前,是不可能说的。这适用于电缆和DMX设备。您需要发布实际的工程规范。