【发布时间】:2020-06-26 10:53:47
【问题描述】:
我有两个 Arduino Leonardo。 这两个 Arduino 板可以通过 SoftwareSerial 库相互通信吗? (不是Serial1,谢谢)
【问题讨论】:
-
答案很可能是肯定的。这是你问的还是你会改进你的问题?
-
如果你在谷歌上问过这个问题,他肯定会说是的。
标签: arduino
我有两个 Arduino Leonardo。 这两个 Arduino 板可以通过 SoftwareSerial 库相互通信吗? (不是Serial1,谢谢)
【问题讨论】:
标签: arduino
是的,您可以使用数字引脚来做到这一点。只需将两个 Tx 连接到 Rx
【讨论】:
是的,您可以在每个 Arduino 上使用任何备用数字引脚
【讨论】:
是的,当然。您可以使用所有 PWN 引脚,3、5、6、10、11、13。
【讨论】:
是的,但您必须始终考虑到 Arduino 是基于 microcrontroler,而不是 微处理器,因此当您对其进行编程时,您应该忘记多任务处理,每一种多任务处理尝试都会出现出现意外行为(减速接近卡住)。
在这种情况下,软件串行通信会根据接收到的数据量减慢程序执行速度,并且在硬件串行通信过程中会完全卡住。
为了解决这个问题,您应该在代码中使用“一次一件事”的方法。
我希望它有所帮助,不要害怕。
【讨论】:
在 Arduino IDE 中的软件序列下有一个示例,说明了如何使用它。它说使用数字引脚 3 和 4 而不是硬件串行引脚 0 和 1。草图不断读取软件串行并将它读取的任何内容打印到串行监视器。
修改此代码以在第二个 Arduino 上运行以不断写入软件串行并不需要太多。
【讨论】:
是的!只需使用 arduino 的 TX 和 RX 引脚。将接收端的TX、RX引脚分别连接到发送端的RX、TX。
【讨论】:
当然,只要确保划掉 RX 和 TX:
RX1 -> TX2
RX2 -> TX1
【讨论】:
您可以使用任何数字引脚作为软件串行,如果我不起作用,请使用引脚 10、11 作为软件串行。
【讨论】:
您可以使用SerialTransfer.h 自动打包和解析您的数据,以便在 Arduino 间进行通信,而无需担心。该库可通过 Arduino IDE 安装,并包含许多示例。
以下是库的功能:
这个库:
- 可以通过 Arduino IDE 的库管理器下载(搜索“SerialTransfer.h”)
- 适用于“软件串行”库
- 是非阻塞的
- 使用数据包分隔符
- 使用一致的开销字节填充
- 使用 CRC-8(带有查找表的多项式 0x9B)
- 允许使用动态大小的数据包(数据包的有效负载长度可以从 1 到 255 个字节)
- 可以传输字节、整数、浮点数,甚至结构!!
TX Arduino 草图示例:
#include "SerialTransfer.h"
SerialTransfer myTransfer;
void setup()
{
Serial.begin(115200);
Serial1.begin(115200);
myTransfer.begin(Serial1);
}
void loop()
{
myTransfer.txBuff[0] = 'h';
myTransfer.txBuff[1] = 'i';
myTransfer.txBuff[2] = '\n';
myTransfer.sendData(3);
delay(100);
}
RX Arduino 草图示例:
#include "SerialTransfer.h"
SerialTransfer myTransfer;
void setup()
{
Serial.begin(115200);
Serial1.begin(115200);
myTransfer.begin(Serial1);
}
void loop()
{
if(myTransfer.available())
{
Serial.println("New Data");
for(byte i = 0; i < myTransfer.bytesRead; i++)
Serial.write(myTransfer.rxBuff[i]);
Serial.println();
}
else if(myTransfer.status < 0)
{
Serial.print("ERROR: ");
Serial.println(myTransfer.status);
}
}
【讨论】:
是的,您可以使用 pwm 引脚进行通信。建议不要使用 0,1 进行串行通信,因为它们用于使用 USB 端口将草图上传到 Arduino。
【讨论】: