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

时间:2018-07-24 12:23:39

标签: arduino nodemcu

我想将我的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);
}

1 个答案:

答案 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);
}