Address strip WS2812B: различия между версиями

Нет описания правки
Строка 377: Строка 377:
- включать (яркость 50%)
- включать (яркость 50%)
- останавливать и запускать автоматическую смену режима
- останавливать и запускать автоматическую смену режима
- вручную выбирать нужный режим
 
==Виртуальное устройство в Wirenboard==
Создадим виртуальное устройство нашей ленты в wirenboard:
<syntaxhighlight lang="javascript">
defineVirtualDevice("ws2812b", {
    title: "ws2812b",
    cells: {
      enabled: {
        type: "switch",
        value: false,
      },
      brightness: {
        type: "value",
        value: 50,
      },     
  hueLoop: {
        type: "switch",
        value: true,  
  }
}
})
 
defineRule("ws2812b/enabled", {
  whenChanged: "ws2812b/enabled",
  then: function (newValue, devName, cellName) {
    if(newValue) {
      dev["ws2812b"]["brightness"] = 50
    } else {
      dev["ws2812b"]["brightness"] = 0
    }
  }
})
</syntaxhighlight>
 
подписываем на топики:
<syntaxhighlight lang="c++">
void setupModbus() {
  pubSubClient.setServer(MODBUS_SERVER, MODBUS_PORT);
  pubSubClient.setCallback(modbusCallback);
  pubSubClient.subscribe("/devices/ws2812b/controls/brightness");
  pubSubClient.subscribe("/devices/ws2812b/controls/hueLoop");
}
</syntaxhighlight>
 
теперь надо константу BRIGHTNESS переделать в переменную, а также ввести переменную hue_loop:
<syntaxhighlight lang="c++">
uint8_t brightness = 50;
bool hueLoop = true;
 
void callback(char* topic, byte* payload, unsigned int length) {
  char payloadChar[sizeof(payload)];
 
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
    payloadChar[i] = (char)payload[i];
  }
  Serial.println();
 
  String payloadStr = String(payloadChar);
 
  if (topic == "/devices/ws2812b/controls/brightness") {
    brightness = payloadStr.toInt();
  }
  if (topic == "/devices/ws2812b/controls/hueLoop") {
    if(payloadChar == "true") {
      hueLoop = true;
    } else {
      hueLoop = false;
    }
  }
}
 
void ChangePalettePeriodically() {
  if(!hueLoop) {
      return;
  }
  ...
}
 
</syntaxhighlight>
123

правки