代码之家  ›  专栏  ›  技术社区  ›  Jeppe Christensen

HM-10读、写、通知,我能一次完成吗?

  •  0
  • Jeppe Christensen  · 技术社区  · 7 年前

    我已经使用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。可用() 我可以向手机写入数据,但手机无法向BT设备发送数据。

    这里发生了什么,为什么我不能同时访问这两个功能,以及潜在的修复方法是什么?

    1 回复  |  直到 7 年前
        1
  •  0
  •   gcmike    7 年前

    我想你不清楚BLE特性的性质,以及HM-10是如何工作的。它的工作方式本质上是一个UART桥接器,从微控制器发送到RX的所有内容都将作为特性的通知发送,来自特性写入的所有内容都将传递到TX,然后传递到微控制器。 因此,在你的情况下,你必须把按钮按下的部分从BTSerial中取出。available()部分,因此您拥有的两个函数是独立的。你必须打开应用程序的通知。