Claire/include/display.hpp
admar 7094d20eca Several improvements:
* Fix color mapping of precipitation
* Fix bug in calculation of max value of pollen / AQI
* Added update() method to backend which will only update after interval period has passed
2024-09-07 00:03:53 +02:00

56 lines
No EOL
2.3 KiB
C++

#ifndef __DISPLAY_HPP__
#define __DISPLAY_HPP__
#include <Adafruit_NeoPixel.h>
#include <Arduino.h>
#include <ArduinoJson.h>
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 clear();
void show();
private:
// Private methods
float findMaxValueInTwelveHourInterval(uint32_t p_time_stamp, ArduinoJson::V710PB22::JsonArray p_array);
std::vector<float> mergeJsonArraysFromTimestamp(uint32_t p_time_stamp, ArduinoJson::V710PB22::JsonArray p_array_a,
ArduinoJson::V710PB22::JsonArray p_array_b);
std::vector<float> 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<uint8_t, uint8_t, uint8_t> mapValueToColorRGB(float p_value);
std::tuple<uint8_t, uint8_t, uint8_t, uint8_t> 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<uint8_t, 12U> m_precipitation_forecast_map;
std::array<uint8_t, 12U> 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;
};
#endif // __DISPLAY_HPP__