我想将我的String变量转换为可以用作PIN码的值
digitalwrite(pindata, boolean);
请注意,这是一个NodeMCU板,其引脚名称类似于D0,D1等。与Arduino号不同。我的字符串可能包含"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);
}
答案 0 :(得分:1)
在pins_arduino.h中定义了从引脚名称到引脚编号的映射。
由于名称是连续的,因此您可以在数组中定义引脚号,并使用索引访问它们。
例如D5的索引5的值为14。
要将"D5"
转换为5
,首先需要用'D'
摆脱.substring(1)
,然后将其余的"5"
转换为带有.toInt()
的整数。
static const uint8_t NAME2PIN[] = {16, 5, 4, 0, 2, 14, 12, 13, 15, 3, 1}
// D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10
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);
}