PubSubClient& ArduinoJSON - Arduino将char传递给digitalWrite

时间:2017-10-30 07:11:44

标签: variables arduino type-conversion

我不确定如何传递函数中的值以便在digitalWrite函数中使用。

我收到以下错误:

error: cannot convert 'String' to 'uint8_t' {aka unsigned char}' for argument '1' to 'void digitalWrite(uint8_t, uint8_t)'

pubsub回调

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("New message on [");
  Serial.print(topic);
  Serial.print("] ");
  Serial.println("");
  char s[length];

  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
    s[i]=payload[i];
  }

  StaticJsonBuffer<500> jsonBuffer;
  JsonObject& root = jsonBuffer.parseObject(s);
  if (!root.success()) {
    Serial.println("parseObject() failed");
  }

  String relay = root["relay"]; // "relayOne"
  int time = root["timestamp"]; // 1351824120
  String trigger = root["trigger"]; // "ON"

  // Feel free to add more if statements to control more GPIOs with MQTT
  commander(relay, trigger);

}

指挥官功能

void commander(String relay, String trigger) {

  if(trigger == "ON"){
      Serial.print("Turning ");
      Serial.println(relay);
      Serial.println(" on");
      digitalWrite(relay, HIGH);
  } else if(trigger == "OFF"){
      Serial.println(relay);
      digitalWrite(relayOne, LOW);
      Serial.print("TRIGGERED!");
  } else {
      // turn all the LEDs off:
      for (int pin = 0; pin < relayPinCount; pin++) {
        digitalWrite(relayPins[pin], LOW);
      }
  }
  Serial.println();
}

1 个答案:

答案 0 :(得分:0)

void commander(String relay, String trigger) {

  uint8_t pinNo;
  if ( relay == "relayOne" ) {
    pinNo = RELAY_1_PIN;
  } else
  if ( relay == "anotherRelay" ) {
    pinNo = OTHER_RELAY_PIN;
  } else 
  if ( ... ) {
    ...
  } else {
    return;
  }

  if(trigger == "ON"){
      Serial.print("Turning ");
      Serial.println(relay);
      Serial.println(" on");
      digitalWrite(pinNo, HIGH);
  } else if(trigger == "OFF"){
      Serial.println(relay);
      digitalWrite(pinNo, LOW);
      Serial.print("TRIGGERED!");
  } else {
      // turn all the LEDs off:
      for (int pin = 0; pin < relayPinCount; pin++) {
        digitalWrite(relayPins[pin], LOW);
      }
  }
  Serial.println();
}