Arduino 如何与HM-19 BLE模块通信并使用超声波传感器进行扫描

Arduino 如何与HM-19 BLE模块通信并使用超声波传感器进行扫描,arduino,arduino-uno,arduino-ide,hm-10,arduino-ultra-sonic,Arduino,Arduino Uno,Arduino Ide,Hm 10,Arduino Ultra Sonic,我正在为我的高中项目工作,我需要做的部分工作是使用HM-19蓝牙5.0模块连接到另一个蓝牙5.0模块并建立主从连接 我可以做得很好,但是当我包含超声波传感器进行扫描所需的代码时,我对HM-19的命令不会返回任何内容,我也无法执行任何基本功能,例如查找连接。我已经测试过超声波传感器代码和没有超声波传感器代码,问题发生在我使用代码的传感器部分时 说清楚一点,我所要做的就是让我的蓝牙5.0芯片连接到另一个芯片上,执行正常的命令,同时在我把手放在前面的时候向串行监视器输入一段距离。这只是一个测试,一旦我

我正在为我的高中项目工作,我需要做的部分工作是使用HM-19蓝牙5.0模块连接到另一个蓝牙5.0模块并建立主从连接

我可以做得很好,但是当我包含超声波传感器进行扫描所需的代码时,我对HM-19的命令不会返回任何内容,我也无法执行任何基本功能,例如查找连接。我已经测试过超声波传感器代码和没有超声波传感器代码,问题发生在我使用代码的传感器部分时

说清楚一点,我所要做的就是让我的蓝牙5.0芯片连接到另一个芯片上,执行正常的命令,同时在我把手放在前面的时候向串行监视器输入一段距离。这只是一个测试,一旦我完成了,我就会开始做我真正想做的事情

这只是一个项目的起点。我有一个功能调用我的传感器和我的蓝牙芯片在无效的循环,这是所有在那里

我只是想知道如何解决这个问题。如何使用超声波传感器进行扫描并向蓝牙模块发送命令?任何帮助都将不胜感激

[这里是传感器被注释时的结果][1]和[这里是导致无限循环的不成功结果,我无法找到返回芯片所述内容的代码部分][2]。最后,尽管大多数链接都包含HM-10的内容,但HM-19的命令基本相同。我正在添加更多内容,因为堆栈溢出不允许我编辑此文章,直到有更多字符或其他内容。我希望你有一个好的白天/晚上的人读这篇文章


这是我的密码:

    //  SerialIn_SerialOut_HM-10_01
//
//  Uses hardware serial to talk to the host computer and AltSoftSerial for communication with the bluetooth module
//
//  What ever is entered in the serial monitor is sent to the connected device
//  Anything received from the connected device is copied to the serial monitor
//  Does not send line endings to the HM-10
//
//  Pins
//  BT VCC to Arduino 5V out. 
//  BT GND to GND
//  Arduino D8 (SS RX) - BT TX no need voltage divider 
//  Arduino D9 (SS TX) - BT RX through a voltage divider (5v to 3.3v)
//

#include <AltSoftSerial.h>
AltSoftSerial BTserial; 
// https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html


char c=' ';
boolean NL = true;
const int trigPin = 9;
const int echoPin = 10;
float duration, distance;
boolean wait_your_turn = false; //My attempt to make sure the sensor and the Bluetooth module don't interfere with each other
//if I'm sending data from the serial monitor to the bluetooth module and vice versa it switches to true and the bluetooth module 
//does its thing, so the sensor doesn't get in the way.

void setup() 
{
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
    Serial.begin(9600);
    Serial.print("Sketch:   ");   Serial.println(__FILE__);
    Serial.print("Uploaded: ");   Serial.println(__DATE__);
    Serial.println(" ");

    BTserial.begin(9600);  
    Serial.println("BTserial started at 9600");
}

void loop()
{
  Bluetooth();
  Sensor();
}

void Sensor(){
  if((wait_your_turn == true))
  {}

  else
  {
    Serial.println("Scanning for stuff.");
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);

    duration = pulseIn(echoPin, HIGH);
    distance = (duration*.0343)/2;

    if(distance <= 20)
    {
      Serial.println(distance);
      delay(500);
    }
  }
}

void Bluetooth()
{
    if (Serial.available())
    {
     if(wait_your_turn == false)
       Serial.println("Serial is available");

      wait_your_turn = true;

     while(Serial.available()>0)
       c = Serial.read();

     Serial.write(c);

     if(c!=10&c!=13)
       BTserial.print(c);       
    }

    if (BTserial.available())
    {
      // Serial.print("We are at the bluetooth portion.");
        while(BTserial.available())
          c = BTserial.read();

        Serial.print(c);
        wait_your_turn = false;
    }
}


  [1]: https://i.stack.imgur.com/Dn4i0.png
  [2]: https://i.stack.imgur.com/s9Ifv.png
//SerialIn\u SerialOut\u HM-10\u 01
//
//使用硬件串行与主机通信,使用AltSoftSerial与蓝牙模块通信
//
//串行监视器中输入的内容将发送到连接的设备
//从连接的设备接收到的任何信息都会复制到串行监视器
//不向HM-10发送行尾
//
//别针
//BT VCC至Arduino 5V输出。
//BT接地至接地
//Arduino D8(SS RX)-BT TX无需分压器
//Arduino D9(SS TX)-通过分压器的BT RX(5v至3.3v)
//
#包括
AltSoftSerial-BTserial;
// https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html
字符c='';
布尔NL=真;
常数int trigPin=9;
常数int echoPin=10;
浮动持续时间、距离;
布尔等待你的回合=false//我试图确保传感器和蓝牙模块不会相互干扰
//如果我正在将数据从串行监视器发送到蓝牙模块,反之亦然,它将切换为true,蓝牙模块也将切换为true
//这样传感器就不会碍事了。
无效设置()
{
引脚模式(trigPin,输出);
pinMode(echoPin,输入);
Serial.begin(9600);
Serial.print(“草图”);Serial.println(_文件);
Serial.print(“已上载”);Serial.println(_日期_;);
Serial.println(“”);
BTserial.begin(9600);
Serial.println(“BTserial从9600开始”);
}
void循环()
{
蓝牙();
传感器();
}
空隙传感器(){
如果((等待你的回合==true))
{}
其他的
{
Serial.println(“扫描内容”);
数字写入(trigPin,高);
延迟微秒(10);
数字写入(trigPin,低电平);
持续时间=脉冲强度(echoPin,高);
距离=(持续时间*.0343)/2;
如果(距离0)
c=串行读取();
串行写入(c);
如果(c!=10&c!=13)
BTserial.print(c);
}
if(BTserial.available())
{
//打印(“我们在蓝牙部分”);
while(BTserial.available())
c=BTserial.read();
连续打印(c);
等待你的轮到=错误;
}
}
[1]: https://i.stack.imgur.com/Dn4i0.png
[2]: https://i.stack.imgur.com/s9Ifv.png

对不起,我忘了这个问题。我想出来了。我所做的是让一个Arduino控制超声波传感器,并在传感器的范围内发送一个字符给另一个Arduino。另一个Arduino随后将读取角色,并根据角色send执行操作。感谢所有发表评论的人,祝您度过愉快的时光。

这是我的代码:我没有看到任何地方将wait_your_turn设置为true。wait_your_turn在Bluetooth()函数中设置为true,在if语句if(wait_your_turn==false)Serial.println(“Serial is available”)下面两行;然后在最后的if语句中再次设置为false。由于传感器和蓝牙功能是按顺序调用的,因此我看不出该标志的用途。该标志是我第一次尝试将扫描和蓝牙功能分开时失败的。我注意到了我逻辑上的缺陷,现在正在努力,看看是否能让它发挥作用。