为什么FastLED不接受该字符串作为字符串?

时间:2020-11-10 23:56:10

标签: arduino led fastled

我正在尝试通过蓝牙串行连接将两个值传递到我的arduino脚本中。接收到的字符串的第一部分是led编号,第二部分是十六进制代码(0x000000)形式的led颜色。第一个变量已转换并且可以正常工作,但是当我尝试传递颜色值时,出现错误,指出操作数必须为CRGB或String。我很困惑为什么在传递字符串时会引发错误。是否有一种方法可以强制上载此错误,因为这是一个错误,或者我确实错过了某些东西。

这是我的代码:

#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();

    
        }
  }

1 个答案:

答案 0 :(得分:0)

leds[x]的类型为CRGB,它将接受uint8_t raw[3]或3个字节作为值,例如:

leds[x] = 0xAA99BB;

您正在向其发送一个String对象,它无法理解。

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

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

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

我更喜欢使用:

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

有关设置LED颜色的六种方法,请参见here