如何使用Nodemcu在Arduino中转换字符串值(pin)以用于digitalWrite(pin,boolean)方



我想将String变量转换为一个可以在中用作pin号的值

digitalwrite(pindata, boolean);

请注意,这是一个NodeMCU板,它的引脚名称像D0、D1等。不像Arduino数字。My String可能包含"D3""D4""D5"等值。

代码:

void post() {
String data = server.arg("msg");
Serial.println(data);
pinPulse(data,1000); // <<-- what here wola it's a String
server.send(200, "text/plain", "Got this data " + data);
}
void pinPulse(char pin, int pulsetime) {
pinMode(pin, OUTPUT);
digitalWrite(pin, 1);
delay(pulsetime);
digitalWrite(pin, 0);
}

pins_arduino.h中定义了从管脚名称到管脚编号的映射。
由于名称是连续的,因此可以在数组中定义管脚编号,并通过索引对其进行访问
例如D5,其具有值为14的索引5。

要将"D5"转换为5,首先需要用.substring(1)去掉'D',然后用.toInt()将其余的("5"(转换为整数。

static const uint8_t NAME2PIN[] = {D0, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10};
//                                 16   5   4   0   2  14  12  13  15   3   1
void post() {
String data = server.arg("msg");
Serial.println(data);
if (data.length() >= 2 && data[0] == 'D') { //check if it's a valid pin name
uint8_t pin = NAME2PIN[data.substring(1).toInt()]; //skip the first character (D) and convert it to an integer
pinPulse(pin, 1000);
server.send(200, "text/plain", "Got this data " + data);
}
}
void pinPulse(uint8_t pin, int pulsetime) {
pinMode(pin, OUTPUT);
digitalWrite(pin, 1);
delay(pulsetime);
digitalWrite(pin, 0);
}

最新更新