Arduino:使用串行和软件串行与蓝牙模块 [英] Arduino: using Serial and Software Serial with bluetooth module

查看:23
本文介绍了Arduino:使用串行和软件串行与蓝牙模块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的目的是使用 Arduino 在 PC 和使用 HC-05 蓝牙模块的 Android 设备之间建立通信.

My purpose is to use Arduino to set up communication between a PC and an Android device using an HC-05 bluetooth module.

我使用 PC 和 Arduino(串行监视器)和 SoftwareSerial 之间的 USB 通信连接到 HC-05.

I use the USB communication between the PC and the Arduino (Serial Monitor) and a SoftwareSerial to connect to the HC-05.

我的问题是从 BT 到 PC 的通信运行良好,但在其他方式下却无法正常工作.当从 PC 发送到 BT 时,只有当我关闭 PC 上的串行监视器或重置 Arduino 时,BT 设备才会接收到所有发送的字符.

My problem is that the communication works well from BT to the PC, but doesn't work as expected in the other way. When sending from the PC to BT all the characters sent are received by the BT device only when I close the Serial Monitor on the PC or when I reset the Arduino.

我已经排除了 BT 模块或 Android 应用程序的问题,因为如果在 Arduino 中我实现了ECHO"代码(在 Android 中编写并在 Android 中发送)一切正常.

I've excluded a problem with the BT Module or the Android application because if in Arduino I implement an "ECHO" code (write in Android and the send in Android) everything works fine.

在 Arduino 代码下方发布预期行为是:Arduino 重置-> 发送问候语,串行监视器打开-> 没有任何反应,串行监视器上写入的字符-> 在 BT 上接收到的字符,在 BT 上写入的字符-> 接收到字符在串行监视器上,串行监视器关闭-> 没有任何反应.

With the Arduino code posted below the expected behaviour is: Arduino reset-> Hello word sent, Serial monitor opened-> nothing happens, character written on serial monitor-> character received on BT, character written on BT-> character received on Serial Monitor, Serial monitor closed-> nothing happens.

实际行为是:Arduino 重置-> 发送Hello 字,串行监视器打开-> BT 上的2 个Hello 字和PC 上的1 个(晚安"),串行监视器上写的字符-> 无,BT 上写的字符-> 在串行监视器上接收到字符,串行监视器关闭-> 在串行监视器中接收到先前写入的字符 + Hello Word.

The real behaviour is: Arduino reset-> Hello word sent, Serial monitor opened-> 2 Hello word on BT and 1 ("goodnight") on PC, character written on serial monitor-> nothing, character written on BT-> character received on Serial Monitor, Serial monitor closed-> previous written character(s) in serial monitor received + Hello Word.

我该如何解决这个问题?

How can I fix this problem?

代码:

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
int a=0;
char c;
char d;
void setup() {
  Serial.begin(9600);
  Serial.println("Goodnight moon!");
  mySerial.begin(9600);
  mySerial.println("Hello, world?");
}
void loop() {
  delay(10);
  if (Serial.available()) {
    c=Serial.read();
    delay(10);
    Serial.write(c);
  }
  delay(10);
  if (mySerial.available()) {
    d=mySerial.read();
    delay(10);
    mySerial.write(d);

  }
}

推荐答案

此代码适用于带有 HC-05 的 Arduino Mini Pro(应该与 UNO 相同).我将 HC-05 与我的笔记本电脑配对.在与 HC-05 和 Arduino 串行控制台关联的 COM 端口上使用超级终端,我可以双向发送消息.Serial.println 语句像它们应该的那样显示在超级终端窗口中.

This code is working for me on an Arduino Mini Pro (should be the same as UNO) with an HC-05. I have the HC-05 paired with my laptop. Using HyperTerminal on the COM port associated with the HC-05 and the Arduino serial console, I can send messages bidirectionally. The Serial.println statements show up in the Hyperterminal window like they should.

#include <SoftwareSerial.h>

#define rxPin 8
#define txPin 7

SoftwareSerial mySerial(rxPin, txPin); // RX, TX
char myChar ; 

void setup() {
  Serial.begin(9600);   
  Serial.println("Goodnight moon!");

  mySerial.begin(9600);
  mySerial.println("Hello, world?");
}

void loop(){
  while(mySerial.available()){
    myChar = mySerial.read();
    Serial.print(myChar);
  }

  while(Serial.available()){
   myChar = Serial.read();
   mySerial.print(myChar);
  }
}

这篇关于Arduino:使用串行和软件串行与蓝牙模块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆