#ifndef __DISPLAY_HPP__ #define __DISPLAY_HPP__ #include #include #include class Display { public: // Constructor Display(Adafruit_NeoPixel& p_leds); public: // Public methods void setPollenPlusAQIForecastLeds(uint32_t p_current_time, ArduinoJson::V710PB22::JsonArray p_pollen, ArduinoJson::V710PB22::JsonArray p_aqi); void setPrecipitationForecastLeds(uint32_t p_current_time, ArduinoJson::V710PB22::JsonArray p_precipitation); void setUVIForecastLed(uint32_t p_current_time, ArduinoJson::V710PB22::JsonArray p_uvi); void setLocalAirQualityLed(float p_iaq); void setWifiStatusLed(bool p_is_connected); void setErrorLed(bool p_is_error); void setPixelColor(uint32_t p_index, uint8_t p_red, uint8_t p_green, uint8_t p_blue, uint8_t p_white); void setBrightness(float p_brightness); void clear(); void show(); private: // Private methods float findMaxValueInTwelveHourInterval(uint32_t p_time_stamp, ArduinoJson::V710PB22::JsonArray p_array); std::vector mergeJsonArraysFromTimestamp(uint32_t p_time_stamp, ArduinoJson::V710PB22::JsonArray p_array_a, ArduinoJson::V710PB22::JsonArray p_array_b); std::vector mergeJsonArraysFromTimestampHelper(uint32_t p_time_stamp, ArduinoJson::V710PB22::JsonArray p_array_a, ArduinoJson::V710PB22::JsonArray p_array_b); float mapPrecipitationToColorIndex(const float p_rain_intensity); std::tuple mapValueToColorRGB(float p_value); std::tuple mapValueToColorRGBW(float p_value); void setPixelToColorMappedValue(uint8_t index, float p_value); private: // Private static members constexpr static uint16_t NUM_LEDS_PROTO_V1 = 29U; constexpr static int16_t DATA_PIN_PROTO_V1 = 14; private: // Private members Adafruit_NeoPixel& m_leds; std::array m_precipitation_forecast_map; std::array m_air_quality_forecast_map; uint8_t m_max_pollen_map; uint8_t m_max_air_qualilty_map; uint8_t m_uvi_map; uint8_t m_local_air_quality_map; uint8_t m_wifi_status_map; float m_brightness; }; #endif // __DISPLAY_HPP__