0

我正在尝试从蓝牙串行连接将两个值传递到我的 arduino 脚本中。接收到的字符串的第一部分是 LED 编号,第二部分是十六进制代码 (0x000000) 形式的 LED 颜色。第一个变量已转换并且工作正常,但是当我尝试传入颜色值时,我收到一条错误消息,指出操作数必须是 CRGB 或字符串。我很困惑为什么当我传递一个字符串时它会抛出一个错误。有没有办法强制上传过去这个错误,因为这是一个错误,或者我真的错过了什么。

这是我的代码:

#include "BluetoothSerial.h"
#include <FastLED.h>

#define DATA_PIN 22
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS 120
#define BRIGHTNESS 23
#define x inputFromOtherSide.substring(3,6).toInt()
CRGB leds[NUM_LEDS];

BluetoothSerial SerialBT;


void setup()
{


  // tell FastLED about the LED strip configuration
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);

  // set master brightness control
  FastLED.setBrightness(BRIGHTNESS);

  Serial.begin(115200);
  Serial.println("Serial Port Started");
  SerialBT.begin("ESP32test");
  Serial.println("Bluetooth Started");

}

void loop()
{
  String inputFromOtherSide;

  if (SerialBT.available()) {
    inputFromOtherSide = SerialBT.readString();
    Serial.println("Data Recieved: ");
    Serial.println(inputFromOtherSide);
    delay(500);

    Serial.println(inputFromOtherSide.substring(3,6));
    Serial.println(inputFromOtherSide.substring(11));

    leds[x] = inputFromOtherSide.substring(11);
    FastLED.show();

    
        }
  }
4

1 回答 1

0

leds[x]类型为CRGB,并且将接受uint8_t raw[3]或三个字节作为值,如下所示:

leds[x] = 0xAA99BB;

您正在向它发送一个它不理解的 String 对象。

如果您确定 中恰好有 3 个字节inputFromOtherSide.substring(11),您可以尝试:

leds[x] = inputFromOtherSide.substring(11).data();

这可能会起作用,具体取决于您通过串行线路发送的内容。如果您发送 6 个字符以十六进制拼出 3 字节数字,则必须先将其转换为 3 字节十六进制数字。

我更喜欢使用:

leds[x].setRGB(170, 153, 187); //0xAA99BB

另请参阅此处了解设置 LED 颜色的六种方法。

于 2020-11-11T10:29:47.237 回答