【发布时间】:2020-06-30 18:51:42
【问题描述】:
我正在为 Ardunio 编写我的第一个 BLE 系统,我正在将它构建在一个已经工作的系统之上,用于控制 RGB 条带,目前,我正在使用 HEX 数字来了解我在哪里设置了什么。
好的,修改问题,
#define BLE_RX 5
#define BLE_TX 4
SoftwareSerial BLE(BLE_RX, BLE_TX);
// set the startup color to white
unsigned long color = 0xFFFFFF;
// hold the last color set so we can off / on without losing prior settings
unsigned long lastColor = 0x000000;
void setup()
{
Serial.begin(9600);
BLE.begin(9600);
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
Serial.println("hello world");
}
void loop() {
long r = ((color >> 16) & 0xFF);
long g = ((color >> 8) & 0xFF);
long b = (color & 0xFF);
char data[100];
analogWrite(RED_LED, r);
analogWrite(GREEN_LED, g);
analogWrite(BLUE_LED, b);
readBLE();
}
long hstol(String recv){
char c[6];
recv.toCharArray(c, 6);
return strtol(c, NULL, 16);
}
void readBLE(){
if(BLE.available() > 0){
String data = BLE.readString();
if(data.length() == 6){
lastColor = color;
Serial.println(data);
Serial.println(hstol(data));
color = hstol(data);
}
}
}
当我第一次运行 CPP 时,如果通过 BLE 我发送 FF0000(红色),LED 灯条应该是白色的,我的 LED 变绿,这是我的输出
当FF0000 应该等于 16711680 时,00FF00 = 65280 和 0000FF = 255
【问题讨论】:
-
你可以使用C库吗?
sscanf会很好用。 -
@john 是的 sscanf 可供我使用
-
@Barkermn01
String recv的格式是什么? -
关于
strtol,如果recv的内容是例如"0xFF0000"那么你可以将它用作strtol(recv.c_str()), 0, 0),或者strtol(recv.c_str() + 2, 0, 16)。 -
@Barkermn01 根据您的新问题,将数组大小更改为
7在hstol内。那时它会正常工作。记住 strtol 是基于\0结束的字符串。