Формат строки заменяется значением в символе в snprintf

В моем NodeMCU на базе ESP8266 у меня есть следующий фрагмент кода:

  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), Так что мне не нужно писать Turn Relay 1 On / Off, и вместо этого я должен получить состояние, используя digitalRead(pinNum) и включить или выключить текст в зависимости от состояния.

0

Решение

троичный (условный) оператор твой друг здесь Вы можете рассматривать это как встроенное if-выражение. Синтаксис выглядит так

condition ? val1 : val2

Выражение даст результат в зависимости от condition, Если condition правда, это даст val1иначе это даст val2,

Вы можете использовать это внутри sprintfs список аргументов для возврата строки в зависимости от состояния вывода.

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"

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]