OLED - odwołanie się do danego czujnika

avatr
Posts: 54
Joined: Sat Jun 20, 2020 9:32 am

Post

Witam,
mam podłączone dwa czujniki BME i SHT. Wyświetlam te dane na OLED. Chciałbym żeby dane z danego czujnika wyświetlały się na jednym ekranie. Mógłbym prosić o podpowiedź jak odwołać się do danego czujnika (kanału)? Programistą nie jestem, jedynie tak sobie potrafię coś przerobić kod. Kombinuję i kombinuję ale nic mi nie wychodzi.

Code: Select all

//BME
void displayBME(OLEDDisplay* display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
  for (auto element = Supla::Element::begin(); element != nullptr; element = element->next()) {
    if (element->getChannel()) {
      auto channel = element->getChannel();
      if (channel->getChannelNumber() == oled[state->currentFrame].chanelSensor) {
        double lastTemperature = channel->getValueDoubleFirst();
        double lastHumidit = channel->getValueDoubleSecond();
        displayUiTemperature(display, state, x, y, lastTemperature);
        displaUiHumidity(display, state, x, y, lastHumidit);
      }
      }
    if (element->getSecondaryChannel()) {
      auto channel = element->getSecondaryChannel();
        double lastPressure = channel->getValueDouble();
        displayUiPressure(display, state, x, y, lastPressure);
    }
  }
}

//SHT
void displaySHT(OLEDDisplay* display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
  for (auto element = Supla::Element::begin(); element != nullptr; element = element->next()) {
    if (element->getChannel()) {
      auto channel = element->getChannel();
      if (channel->getChannelNumber() == oled[state->currentFrame].chanelSensor) {
        double lastTemperature = channel->getValueDoubleFirst();
        double lastHumidit = channel->getValueDoubleSecond();
        displayUiTemperature(display, state, x, y, lastTemperature);
        displaUiHumidity(display, state, x, y, lastHumidit);
      }
      }
  }
}
.
.
.
    frames = new FrameCallback[maxFrame];
    oled = new oledStruct[maxFrame];

    for (auto element = Supla::Element::begin(); element != nullptr; element = element->next()) {
      if (element->getChannel()) {
        auto channel = element->getChannel();

        if (channel->getChannelType() == SUPLA_CHANNELTYPE_HUMIDITYANDTEMPSENSOR) {
          frames[frameCount] = {displayBME};
          oled[frameCount].chanelSensor = channel->getChannelNumber();
          frameCount += 1;
        }
        if (channel->getChannelType() == SUPLA_CHANNELTYPE_HUMIDITYANDTEMPSENSOR) {
          frames[frameCount] = {displaySHT};
          oled[frameCount].chanelSensor = channel->getChannelNumber();
          frameCount += 1;
        }
        if (channel->getChannelType() == SUPLA_CHANNELTYPE_HUMIDITYSENSOR) {
          frames[frameCount] = {displayGeneral};
          oled[frameCount].chanelSensor = channel->getChannelNumber();
          oled[frameCount].forSecondaryValue = true;         
          frameCount += 1;
        }
      }
    }
krycha88
Posts: 5575
Joined: Fri Nov 16, 2018 7:25 am
Been thanked: 5 times

Post

Nie jest to tylko jedna zmiana, więc trochę ciężko pomoc.
https://gui-generic-builder.supla.io/
avatr
Posts: 54
Joined: Sat Jun 20, 2020 9:32 am

Post

Dzięki za odpowiedź. Nie miałem ostatnio czasu ale dziś jakoś mnie olśniło i zmieniłem:

Code: Select all

if (channel->getChannelType() == SUPLA_CHANNELTYPE_HUMIDITYANDTEMPSENSOR)
na poniższy kod ze wskazaniem konkretnego kanału.

Code: Select all

if (channel->getChannelNumber() == 3)
Wychodzi na to, że działa tak jak chciałem. Jak poustawiam już do końca ekrany to przedstawię co mi wyszło ;)

Return to “GUI Generic”