将 USB/串行设备与 Arduino USB/串行接口连接

问题描述 投票:0回答:2

在一侧,我有一个带有 USB(FTDI 芯片)接口的设备,以串行 9600bps,N,8,1 进行通信 - 这是 Arduino USB/串行接口的默认配置。 另一方面,我有一个简单的 Arduino 草图,用于启动串行会话并传输数据。

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600,SERIAL_8N1);
}

void loop() {
  // put your main code here, to run repeatedly: 
  char* data_to_send="66"; 
  SSEND(data_to_send);
  delay(5000);
}

String SSEND(char* data){
  String protocol="AT$SF=";
  protocol+=(String)data;
//  protocol+="\r";
  Serial.println(String(protocol));
  delay(1000);
  return "OK";
}

当连接到计算机时,草图工作得很好。 然后我尝试连接到设备,看到 Tx LED 停止闪烁,因此它不会发送任何内容,当然设备无法按预期工作。此外,我尝试直接从计算机向设备发送串行命令,效果很好。

所以我的问题是:

  • 为什么 Arduino 和我的设备之间的串行接口不起作用?
  • 为什么USB/串口从电脑切换到设备后Arduino就停止发送数据
  • 如何让该设备与 Arduino 配合使用?
  • 我应该使用插入端口 0 和 1 的分体 FTDI 电缆来切换 TX 和 RX 吗?

感谢您的帮助

Picture of the connection

serial-port arduino usb arduino-uno ftdi
2个回答
2
投票

我怀疑该设备是USB设备而不是USB主机,并且您将两个USB设备插入在一起。 Arduino 不是 USB 主机,USB 连接始终需要主机。

根据 USB 规范,您使用的插头适配器甚至不应该存在,因为不同形状的插头是专门为使两个设备无法像您在此处所做的那样相互插入而存在的。

使其工作的方法是使用另一块实际上支持充当 USB 主机的板。


0
投票

我发现这段代码非常适合从设备接收数据。根据您的需要设置波特率,但不要将 Arduino 上的 TX 引脚连接到设备上的 RX 引脚,否则它会将设备输出的所有数据发送回自身。您可以找到另一种输出方式,但要将数据发送到设备,您可以使用“Serial.println()”。

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    char incomingByte = Serial.read();
    Serial.print(incomingByte);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.