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

Arduino 为什么FastLED不接受字符串作为字符串?,arduino,led,fastled,Arduino,Led,Fastled,我试图将两个值从blueooth串行连接传递到我的arduino脚本中。接收的字符串的第一部分是led编号,第二部分是十六进制代码(0x000000)形式的led颜色。第一个变量已转换且工作正常,但当我尝试传入颜色值时,我得到一个错误,表示操作数必须是CRGB或字符串。我很困惑,当我传递一个字符串时,为什么它会抛出一个错误。有没有一种方法可以强制上传这个错误,因为这是一个错误,或者我真的错过了什么 这是我的密码: #include "BluetoothSerial.h" #i

我试图将两个值从blueooth串行连接传递到我的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();

    
        }
  }
#包括“BluetoothSerial.h”
#包括
#定义数据针22
#定义LED_类型WS2812B
#定义颜色顺序GRB
#定义数量指示灯120
#定义亮度23
#定义x inputFromOtherSide.substring(3,6).toInt()
CRGB发光二极管[NUM_发光二极管];
蓝牙系列;
无效设置()
{
//告诉FastLED有关LED条配置的信息
快速发光。添加发光二极管(发光二极管,数量发光二极管);
//设置主亮度控制
快速。正确性(亮度);
序列号开始(115200);
Serial.println(“串口启动”);
SerialBT.begin(“ESP32test”);
Serial.println(“蓝牙启动”);
}
void循环()
{
从另一端输入的字符串;
if(SerialBT.available()){
inputFromOtherSide=SerialBT.readString();
Serial.println(“收到的数据:”);
Serial.println(从另一端输入);
延迟(500);
Serial.println(从另一端输入子字符串(3,6));
Serial.println(从另一端输入子字符串(11));
LED[x]=从另一侧输入。子串(11);
fasted.show();
}
}

发光二极管[x]
的类型为
CRGB
,将接受
uint8\t raw[3]
或三个字节作为值,如下所示:

led[x]=0xAA99BB

您正在向它发送一个字符串对象,它无法理解

如果您确定从Otherside.substring(11)
输入的
中正好有3个字节,您可以尝试:

led[x]=从另一端输入。子字符串(11)。数据()

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

我更喜欢使用:

led[x].setRGB(170153187)//0xAA99BB

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