我正在尝试通过蓝牙串行连接将两个值传递到我的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();
}
}
答案 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。