字符串格式替换为snprintf中的字符值

时间:2017-03-27 11:25:39

标签: c++ c printf nodemcu

我在基于ESP8266的NodeMCU中有以下功能代码:

  snprintf ( temp, 800,
             "<html>\
  <head>\
    <meta http-equiv='refresh' content='25'/>\
    <title>NodeMCU DHT11 Sensor \and Relay Board</title>\
    <style>\
      body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
      li { margin: 10px 0;}\
    </style>\
  </head>\
  <body>\
  <h1>Hello from NodeMCU!</h1>\
  <p>Temperature: %02d &#8451;<br>\
  Humidity: %2d %<br></p><ol>\
  <li><a href='/control?relay=5&state=%d'>Turn Relay 1 On\/Off</a>\
  <li><a href='/control?relay=4&state=%d'>Turn Relay 2 On\/Off</a></ol>\
    <p> Uptime: %02d:%02d:%02d </p>\
  </body>\
</html>",
             t, h, !digitalRead(5), !digitalRead(4), hr, min % 60, sec % 60
           );

我希望能够根据来自digitalRead(5)的引脚状态将off替换为off,反之亦然。因此,我不必打开/关闭Turn Relay 1,而是使用digitalRead(pinNum)来获取状态,并根据状态设置文本的开启或关闭。

1 个答案:

答案 0 :(得分:0)

ternary (conditional) operator是你的朋友。您可以将其视为内联if语句。语法如下所示

condition ? val1 : val2

表达式将产生取决于condition的结果。如果condition为真,则会产生val1,否则会产生val2

你可以在sprintf参数列表中使用它来返回一个字符串,具体取决于引脚状态。

snprintf(temp, 800, 
    "... <li><a href='/control?relay=5&state=%d'>Turn Relay 1 %s</a><li> ... ", 
    !digitalRead(5), (digitalRead(5) ? "Off" : "On");

%s是字符串的占位符,根据引脚5的状态,它将替换为"On""Off"