首页 > 解决方案 > 使用蓝牙在 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条的所有引脚和对象都已正确设置。

标签: carduinobluetooth

解决方案


推荐阅读