c - 使用蓝牙在 arduino 上接收带有字符的 2 字节数字时出现问题
问题描述
我正在开发一个允许我通过蓝牙控制我的 NeoPixel LED 灯条的应用程序。普通命令作为单个字符发送,而亮度和色调的滑块值作为两字节整数发送。
但是我的代码有两个问题。首先是我无法在我的 arduino 上交替接收一个字节和两个数据。这是我当前的代码:
void loop() {
if (BlueTooth.available() >= 1){
BT_input=(BlueTooth.read());
if(BT_input == 'n'){
brightness = 255;
setRGB();
}
if(BT_input == 'f'){
brightness = 0;
setRGB();
}
}
if (BlueTooth.available() >= 2){
unsigned int value1 = BlueTooth.read();
unsigned int value2 = BlueTooth.read();
unsigned int real_value = (value2*256) + value1;
Serial.println(real_value);
if(real_value >= 1000 && real_value <= 1100){
brightness = map(real_value, 1000, 1100, 0, 255);
setRGB();
delay(10);
}
if(real_value >= 2000 && real_value <= 2360){
hue = map(real_value, 2000, 2360, 0, 360);
setRGB();
delay(10);
}
if(real_value >= 3000 && real_value <= 3360){
hue = map(real_value, 3000, 3360, 0, 360);
colorWipe();
delay(10);
}
}
}
当我注释掉检查一个字节数据的第一块代码时,我能够接收到传入的两个字节消息的值。但是当我尝试同时运行这两个东西时,只接收到一个字节,并且忽略了任何超过它的字节。
我的第二个问题是关于我的滑块值。当我的两字节代码确实有效时,只有当我用手指点击滑块时它才能完美运行。当我将手指滑过它的那一刻,收到的两个字节值最终会变得越来越大,直到它们太高以至于我的 if 语句无法检测到任何东西。然后,如果我返回点击滑块,值将保持在数万范围内。
所以我想知道可能是什么问题。我知道这与我如何接收和区分我的数据有关,因为当我注释掉一个字节码时,两个字节码可以工作,尽管并不完美。
*旁注:串行设置为正确的波特率,蓝牙和neopixel条的所有引脚和对象都已正确设置。
解决方案
推荐阅读
- blockchain - 构建无交易区块链应用程序的概念
- python - Scrapy 不创建 JSON 文件
- amazon-web-services - AWS-Logs, ElasticSearch : 日志未显示在来自 AWS-Logs 的 Kibana
- python - 以 Python 字符串格式放置单引号和双引号?
- javascript - Anychart 中的森伯斯特图:如何在标签中换行?
- c++ - Difference between returning *this and this - c++
- facebook - 用户编辑评论时的 webhook facebook 插件评论通知
- svn - 从本地副本恢复 SVN 修订
- c++ - MPI_Isend 之后 MPI_Wait 的确切行为是什么?
- vb.net - 如何在 vb net 中使用 OpenSubtitlesHandler 下载 subs