Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t从arduino发送RS-232命令以进行工作_C_Arduino_Serial Port_Embedded_Serial Communication - Fatal编程技术网

Can';t从arduino发送RS-232命令以进行工作

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

从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("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命令,停止显示该命令将停止显示
格式H1

  • H3命令,以循环时间开始显示
格式H3x 警告X值是8位二进制数据,而不是ascii。 此命令将启动显示和循环X次。 要运行show once,必须将X设置为0x00,最大循环数为100。如果X设置为101
节目将永远循环。

字节在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设备。您需要发布实际的工程规范。