HM-10读取,写入,通知,我可以一次完成所有操作吗?

时间:2018-08-14 21:40:13

标签: bluetooth arduino-uno hm-10

我已经使用SoftwareSerial.h库在下面编写了以下代码

void loop(){
//BT LED READ
    if(BTSerial.available())
    {
        int c = BTSerial.read();
        Serial.println(c);
        Serial.print("\n");

        if (c == 1)
            digitalWrite(ledpin, HIGH);

        else if (c == 0)
          digitalWrite(ledpin, LOW);

  //BUTTON PRESS CODE
        buttonState = digitalRead(inputPin);
        if(buttonState == HIGH)
        {
            digitalWrite(outputLed, HIGH);
            BTSerial.print(22);
        }
        else
        {
            digitalWrite(outputLed, LOW);
        } 
    }

//Serial.println(digitalRead(state));

}

为配合我的代码,我在Xamarin Studio中编写了一个移动应用程序。我的代码所做的是,它接受来自应用程序的调用(0或1个字节),这使它打开LED。

第二,我想完成但仍在挣扎的是我希望Arduino通知我的应用程序(或编写...我真的不确定这个库允许我做什么,因为我已经很难找到一些详尽的文档),当按下面包板上的按钮时-按下该按钮时,LED也会亮起。

我意识到,如果将按钮按下的代码封装在BTSerial.available()内,它将无法正常工作,这意味着它不会向我的应用程序发送任何数据,当我按下按钮时,LED也不会点亮按钮。 -尽管它仍然接受发送给它的参数。

反之亦然,如果我不将按钮代码封装在BTSerial.available()内,则可以将数据写入手机,但是手机无法将数据发送到BT设备。

这是怎么回事,为什么我不能同时访问这两个功能,潜在的解决方法是什么?

1 个答案:

答案 0 :(得分:0)

我认为您不清楚BLE特性的特性以及HM-10的功能。它的工作方式实质上是一个UART桥接器,所有从微控制器发送到RX的消息都将作为特性的通知发送,并且所有来自特性写入的消息都将传递到TX,然后传递给微控制器。 因此,在您的情况下,您必须从BTSerial.available()部分中删除按钮按下的部分,以便您拥有的两个功能是独立的。而且您必须打开应用程序的通知。