c - 从 arduino 上传入的蓝牙序列中提取值

标签 c bluetooth arduino

我目前正在开发一个项目,该项目涉及一个通过 arduino 控制 LED 灯带的 Android 应用程序。这是通过蓝牙模块完成的。我遇到的问题是该应用程序涉及控制 LED 灯带的亮度和色调等功能。因此,当应用程序上的任何这些组件发生更改时,都会向 arduino 发送一个值,以便它更新这些值。消息的发送方式类似于“bt+50!”其中前两个字母标识更改了哪个组件(bt = 亮度),“+”表示实际值的开头,“!”表示实际值的开头。表示结束。

我希望帮助弄清楚如何拆分和拼接传入消息,以便我可以首先识别更改了哪个组件,然后能够提取整数值,例如:

if(message_id == 'bt'){
    brightness = message_value;
}

目前我只是在普通的单色 LED 灯上进行测试。我只实现了非常简单的代码,该代码对从蓝牙串行传入的单字母消息起作用。

我尝试过使用内置的 C 字符串函数,但由于我是 C 语言新手,而且我有 Python 背景,所以很难让事情正常工作。

// Bluetooth module used - HC-06

#include <SoftwareSerial.h>
SoftwareSerial BlueTooth(5, 6); // (TXD, RXD) of HC-06

char BT_input; // to store input character received via BT.

void setup()  
{
  pinMode(13, OUTPUT);     // Arduino Board LED Pin
  BlueTooth.begin(9600);  
}

void loop() 
{
  if (BlueTooth.available())
  {
    BT_input=(BlueTooth.read());
    if (BT_input=='n')
    {
      digitalWrite(13, HIGH);
      BlueTooth.println("Now LED is ON");
    }
    else if (BT_input=='f')
    {
      digitalWrite(13, LOW);
      BlueTooth.println("Now LED is OFF");
    }
  }
}

我希望从传入消息中提取 message_id 和 message_value,以便我能够更新我的 LED 灯条。

最佳答案

您可以使用string变量来存储所有读取值,一旦!被读取,它将开始处理它。

#include <SoftwareSerial.h>
SoftwareSerial BlueTooth(5, 6); // (TXD, RXD) of HC-06

char input; // to store input character received via BT.
String data;

void setup()  
{
  pinMode(13, OUTPUT);     // Arduino Board LED Pin
  BlueTooth.begin(9600);  
}

void loop() 
{
  if (BlueTooth.available())
  {
    input=(BlueTooth.read());

      if (input != '!') {
          data += input;
      }
      else{
          String message_id = String(data.substring(0,2)); //gets only "bt"
          data.remove(0,3); //data becomes "50" since '!' is not added to data

          int message_value = data.toInt();

          if(message_id == "bt"){
               brightness = message_value;
          }
      }
  }
}

关于c - 从 arduino 上传入的蓝牙序列中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56771664/

相关文章:

将函数复制到可执行页面并调用

c++ - 在 Linux 中更改线程优先级和调度程序

通过蓝牙 PAN 在 MacBook Air 上进行 Android 4.4.2 反向网络共享 - 未连接到互联网

arduino - 如何通过 ESP8266 创建 TCP 服务器?

c++ - 错误 : expected '=' , ','、 ';'、 'asm' 或 '__attribute__' token 之前的 ':'

c - 如何使用 C 计算文本文件中特定字符串的出现次数

将 const char* 复制到 char 数组中(面临错误)

c# - 后台任务由SocketActivityTrigger激活,但是触发器中的套接字返回null

ios - AVAudioSession 在某些蓝牙设备上不工作

c++ - 如何避免使用 EEPROM 而不是闪存?