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