Arduino MEGA2560与蓝牙的通信(玄学)问题

使用Arduino UNO和HC05进行通信的时候,会用到一个语句

SoftwareSerial BT(10, 11);

这是定义一个SoftwareSerial对象:BT,并初始化了RX和TX的引脚,这之后才能通过BT对象对蓝牙进行操作。

但当与HC05通信时的单片机变成MEGA的时候,事情就变得玄学了起来。

某位小伙伴彻夜的实验表明,这条语句似乎对MEGA并不会起什么作用…

经过一番查找,我在Arduino的库文件里找到了这几条语句:

// These serial port names are intended to allow libraries and architecture-neutral
// sketches to automatically default to the correct port name for a particular type
// of use.  For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
// the first hardware serial port whose RX/TX pins are not dedicated to another use.
//
// SERIAL_PORT_MONITOR        Port which normally prints to the Arduino Serial Monitor
//
// SERIAL_PORT_USBVIRTUAL     Port which is USB virtual serial
//
// SERIAL_PORT_LINUXBRIDGE    Port which connects to a Linux system via Bridge library
//
// SERIAL_PORT_HARDWARE       Hardware serial port, physical RX & TX pins.
//
// SERIAL_PORT_HARDWARE_OPEN  Hardware serial ports which are open for use.  Their RX & TX
//                            pins are NOT connected to anything by default.
#define SERIAL_PORT_MONITOR         Serial
#define SERIAL_PORT_HARDWARE        Serial
#define SERIAL_PORT_HARDWARE1       Serial1
#define SERIAL_PORT_HARDWARE2       Serial2
#define SERIAL_PORT_HARDWARE3       Serial3
#define SERIAL_PORT_HARDWARE_OPEN   Serial1
#define SERIAL_PORT_HARDWARE_OPEN1  Serial2
#define SERIAL_PORT_HARDWARE_OPEN2  Serial3

也就是说,MEGA自己定义了Serial,Serial1,Serial2,Serial3这些对象,如果直接把蓝牙的rxtx接在MEGA的第一组txrx上,然后直接调用Serial1对象,就可以实现通信,譬如这样:

#include <SoftwareSerial.h> 

// Pin10为RX,接HC05的TXD
// Pin11为TX,接HC05的RXD
//SoftwareSerial BT(14, 15); 这是没有用的
char val;

void setup() {
  Serial.begin(9600); 
  Serial.println("BT is ready!");
  Serial3.begin(9600);
}

void loop() {
  if (Serial.available()) {
    val = Serial.read();
    Serial3.print(val);
    delay(20);
  }

  if (Serial3.available()) {
    val = Serial3.read();
    Serial.print(val);
    delay(20);
  }
  delay(20);
}

综上所述,使用MEGA通过蓝牙通信的时候,就不要自己去定义串口对象了,直接使用MEGA提供的Serial1,Serial2,Serial3就可以

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Arduino Mega2560和Uno可以通过串口通信进行通信。其中,Mega2560的串口有4个,分别为Serial、Serial1、Serial2和Serial3,而Uno只有一个串口,即Serial。因此,如果需要在Mega2560和Uno之间进行通信,可以将其中一个板子的串口连接到另一个板子的串口,然后通过串口通信进行数据传输。具体的实现方法可以参考Arduino官方文档中的相关示例代码。 ### 回答2: Arduino Mega2560和Uno都是Arduino开发板系列中的常见类型,但由于它们的硬件架构不同,因此通信需要考虑一些因素。在我回答这个问题之前,需要了解一下Arduino Mega2560和Uno的基本差异。 Arduino Mega2560相比Uno拥有更多的GPIO引脚,更高的处理器频率,更大的存储空间和更多的内存。相应的,它的体积比Uno要大得多。在通信的方面,Arduino Mega2560与Uno之间有以下两种方式: 1.串口通信: 串口通信Arduino中最常用的通信方式之一。Arduino Mega2560和Uno都有一个串行通信口,可以通过串口1(Uno)和串口3(Mega2560)进行串口通信。在Uno上,该通信口标记为pin 0和1;在Mega上,它标记为RX3(TX3)和TX3(RX3)。 2. I2C通信: I2C通信是与扩展板进行通信的另一种常见方式,例如传感器和其他设备。Mega2560和Uno都可以通过I2C进行通信。在Mega2560上,SCL和SDA引脚标记为SCL和SDA,并位于引脚20和21上;在Uno上,SCL和SDA引脚标记为A5和A4,并位于引脚 27和28上。 在使用I2C通信时,您需要设置master和slave设备。通信需要确保两个设备的I2C地址是不同的,否则通信会失败。可以通过WIRE库在Arduino代码中实现I2C通信,其中master设备发出控制命令,slave设备执行相应的操作。 综上所述,Arduino Mega2560和Uno之间有两种常见的通信方式:串口和I2C。在使用这些通信方式时,需要注意保证设备之间的匹配和协议一致。具体的设置可以参考各自的文档和资料,以实现成功的通信。 ### 回答3: Arduino Uno和Mega 2560是两种常见的Arduino开发板类型。虽然这两种开发板有许多相似的地方,但是它们在某些方面还是有所不同。例如,Arduino Uno芯片上只有一个UART,因此只有一个硬件串口。相比之下,Mega 2560有四个UART以支持多个串口。这就是他们之间连接通信的首要区别。 由于这两个板子实质上是相同的处理器,因此它们之间可以进行通信。要实现这种通信,你需要引入一些额外的电缆和电路。 首先,你需要确保每个板子都有一个电源,例如它们自己的电池电源或者通过USB线接入电脑来进行供电。然后,你需要在两个板子之间建立通信链路。如果你使用硬件串口,则可以使用Arduino UNO的TX端口和Mega的RX端口进行连接。这需要一些跳线,并使用两个电阻,一个用于每个板子。 基本总线连接方法如下: Arduino UNO PIN 1(TX) <<--->> Mega 2560 PIN 19(RX) Arduino UNO PIN 0(RX) <<--->> Mega 2560 PIN 18(TX) 然后,你需要使用下面的代码来进行简单的通信: 在Mega板上的代码 void setup() { Serial.begin(9600); // 与电脑串口通信 } void loop() { Serial.println("Hello from Mega")->打印消息 delay(1000);// 等待1000毫秒 } 在UNO板上的代码 void setup() { Serial.begin(9600); pinMode(13, OUTPUT);//指定LED 13为输出 } void loop() { if (Serial.available() > 0) { char incomingMessage = Serial.read(); //从Mega读取数据 Serial.println(incomingMessage); digitalWrite(13, HIGH);// LED闪亮 delay(250);// 延时250毫秒 digitalWrite(13, LOW);// LED关闭 } } 通过串口通信,你可以使两个开发板之间交换信息。如果你想要更复杂的操作,则可以考虑使用I2C或SPI总线协议,这些协议还具有其他优点,例如可以支持更多的设备。无论你选择哪种方式,都需要确保每个板子都有一个良好的电源供给,并且你对编程的理解要足够深入,才能实现正确的通信

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值