我目前正在开发一个项目,该项目涉及一个通过 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/