From 7c2b0d8d24ec0a07db42c1f2954228169741cd99 Mon Sep 17 00:00:00 2001 From: Matthias Mitscherlich Date: Sat, 25 Nov 2023 15:24:51 +0100 Subject: [PATCH] Updated the matrix to the real size Fixed orientation missings added the temperature wordmap --- code/main/CMakeLists.txt | 3 + code/main/inc/bmp280.h | 5 + code/main/inc/daywordmap.h | 72 +++++++++++++++ code/main/inc/ledmatrix.h | 6 ++ code/main/inc/temperature.h | 76 +++++++++++++++ code/main/inc/temperaturewordmap.h | 72 +++++++++++++++ code/main/inc/wordmap.h | 5 + code/main/main.cpp | 81 ++++++++++++---- code/main/src/bmp280.cpp | 20 ++++ code/main/src/clock.cpp | 32 ++++++- code/main/src/clockwordmap.cpp | 2 +- code/main/src/daywordmap.cpp | 76 +++++++++++++++ code/main/src/ledmatrix.cpp | 133 +++++++++++++++++++++------ code/main/src/temperature.cpp | 76 +++++++++++++++ code/main/src/temperaturewordmap.cpp | 95 +++++++++++++++++++ code/main/src/wordmap.cpp | 17 ++++ doc/matrix.ods | Bin 12209 -> 13011 bytes 17 files changed, 723 insertions(+), 48 deletions(-) create mode 100644 code/main/inc/daywordmap.h create mode 100644 code/main/inc/temperature.h create mode 100644 code/main/inc/temperaturewordmap.h create mode 100644 code/main/src/daywordmap.cpp create mode 100644 code/main/src/temperature.cpp create mode 100644 code/main/src/temperaturewordmap.cpp diff --git a/code/main/CMakeLists.txt b/code/main/CMakeLists.txt index 89e49cc..e2dc1de 100644 --- a/code/main/CMakeLists.txt +++ b/code/main/CMakeLists.txt @@ -14,6 +14,9 @@ idf_component_register( "src/clock.cpp" "src/wordmap.cpp" "src/clockwordmap.cpp" + "src/daywordmap.cpp" + "src/temperaturewordmap.cpp" + "src/temperature.cpp" INCLUDE_DIRS # optional, add here public include directories "inc" PRIV_INCLUDE_DIRS # optional, add here private include directories diff --git a/code/main/inc/bmp280.h b/code/main/inc/bmp280.h index 2be6b88..f66ef2a 100644 --- a/code/main/inc/bmp280.h +++ b/code/main/inc/bmp280.h @@ -84,6 +84,8 @@ class BMP280 bool setSensorMode(BMP280_Mode_t mode); bool setSensorTemperatureOversampling(BMP280_Oversampling_t oversampling); + int getTemperature(void); + private: struct CompensationParameters @@ -148,6 +150,9 @@ class BMP280 void compensateTemperature(void); + void getPreasureValues(void); + void getTemperatureValues(void); + }; diff --git a/code/main/inc/daywordmap.h b/code/main/inc/daywordmap.h new file mode 100644 index 0000000..e4f175a --- /dev/null +++ b/code/main/inc/daywordmap.h @@ -0,0 +1,72 @@ +// -------------------------------------------------------------------------------------------------------------------- +/// \file daywordmap.h +/// \brief File description +// -------------------------------------------------------------------------------------------------------------------- +// +// vbchaos software design +// +// -------------------------------------------------------------------------------------------------------------------- +/// $Revision: $ +/// $Author: $ +/// $Date: $ +// (c) 2023 vbchaos +// -------------------------------------------------------------------------------------------------------------------- + + +#ifndef MAIN_INC_DAYWORDMAP_H_ +#define MAIN_INC_DAYWORDMAP_H_ + +/** + * daywordmap implementation + * \defgroup daywordmap + * \brief {group_description} + * \addtogroup {Layer} + * + * Detailed description + * @{ + */ + + + +// -------------------------------------------------------------------------------------------------------------------- +// Include files +// -------------------------------------------------------------------------------------------------------------------- + +// CompilerIncludes +// All include files that are provided by the compiler directly + + + +// ProjectIncludes +// All include files that are provided by the project +#include "wordmap.h" + +// -------------------------------------------------------------------------------------------------------------------- +// Constant and macro definitions +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Type definitions. +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Function declarations +// -------------------------------------------------------------------------------------------------------------------- + +class DayWordmap: public Wordmap +{ + public: + DayWordmap(LEDMatrix* matrix); + protected: + void createList_NL(void); +// void createList_EN(void); +}; + + +/** @} */ + +#endif /* MAIN_INC_DAYWORDMAP_H_ */ diff --git a/code/main/inc/ledmatrix.h b/code/main/inc/ledmatrix.h index a953e80..41bc3ce 100644 --- a/code/main/inc/ledmatrix.h +++ b/code/main/inc/ledmatrix.h @@ -114,11 +114,15 @@ class LEDMatrix bool setPixelValue(unsigned int colum, unsigned int row, bool value); void setGlobalColour(uint8_t red, uint8_t green, uint8_t blue); + void setPixelColour(unsigned int colum, unsigned int row, uint8_t red, uint8_t green, uint8_t blue); void clear(void); BaseType_t tick(void); + protected: + unsigned int findPixelIndexFromCoordinates(unsigned int colum, unsigned int row); + private: LEDMatrix_Parameters_t parameters; @@ -130,6 +134,8 @@ class LEDMatrix static TaskHandle_t matrixTaskHandle; static SemaphoreHandle_t taskSemaphore; static void matrixTask(void* parameters); + + }; diff --git a/code/main/inc/temperature.h b/code/main/inc/temperature.h new file mode 100644 index 0000000..3f58f43 --- /dev/null +++ b/code/main/inc/temperature.h @@ -0,0 +1,76 @@ +// -------------------------------------------------------------------------------------------------------------------- +/// \file temperature.h +/// \brief File description +// -------------------------------------------------------------------------------------------------------------------- +// +// vbchaos software design +// +// -------------------------------------------------------------------------------------------------------------------- +/// $Revision: $ +/// $Author: $ +/// $Date: $ +// (c) 2023 vbchaos +// -------------------------------------------------------------------------------------------------------------------- + + +#ifndef MAIN_INC_TEMPERATURE_H_ +#define MAIN_INC_TEMPERATURE_H_ + +/** + * temperature implementation + * \defgroup temperature + * \brief {group_description} + * \addtogroup {Layer} + * + * Detailed description + * @{ + */ + + + +// -------------------------------------------------------------------------------------------------------------------- +// Include files +// -------------------------------------------------------------------------------------------------------------------- + +// CompilerIncludes +// All include files that are provided by the compiler directly +#include +#include + + + +// ProjectIncludes +// All include files that are provided by the project + +// -------------------------------------------------------------------------------------------------------------------- +// Constant and macro definitions +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Type definitions. +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Function declarations +// -------------------------------------------------------------------------------------------------------------------- + +using namespace std; + +class Temperature +{ + public: + Temperature(void); + + void generateWordlist(int temperature, list* wordlist); + + private: +}; + + +/** @} */ + +#endif /* MAIN_INC_TEMPERATURE_H_ */ diff --git a/code/main/inc/temperaturewordmap.h b/code/main/inc/temperaturewordmap.h new file mode 100644 index 0000000..de38500 --- /dev/null +++ b/code/main/inc/temperaturewordmap.h @@ -0,0 +1,72 @@ +// -------------------------------------------------------------------------------------------------------------------- +/// \file TemperatureWordmap.h +/// \brief File description +// -------------------------------------------------------------------------------------------------------------------- +// +// vbchaos software design +// +// -------------------------------------------------------------------------------------------------------------------- +/// $Revision: $ +/// $Author: $ +/// $Date: $ +// (c) 2023 vbchaos +// -------------------------------------------------------------------------------------------------------------------- + + +#ifndef MAIN_INC_TEMPERATUREWORDMAP_H_ +#define MAIN_INC_TEMPERATUREWORDMAP_H_ + +/** + * TemperatureWordmap implementation + * \defgroup TemperatureWordmap + * \brief {group_description} + * \addtogroup {Layer} + * + * Detailed description + * @{ + */ + + + +// -------------------------------------------------------------------------------------------------------------------- +// Include files +// -------------------------------------------------------------------------------------------------------------------- + +// CompilerIncludes +// All include files that are provided by the compiler directly + + + +// ProjectIncludes +// All include files that are provided by the project +#include "wordmap.h" + +// -------------------------------------------------------------------------------------------------------------------- +// Constant and macro definitions +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Type definitions. +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Function declarations +// -------------------------------------------------------------------------------------------------------------------- + +class TemperatureWordmap: public Wordmap +{ + public: + TemperatureWordmap(LEDMatrix* matrix); + protected: + void createList_NL(void); +// void createList_EN(void); +}; + + +/** @} */ + +#endif /* MAIN_INC_TEMPERATUREWORDMAP_H_ */ diff --git a/code/main/inc/wordmap.h b/code/main/inc/wordmap.h index 6ce9f98..31f69a6 100644 --- a/code/main/inc/wordmap.h +++ b/code/main/inc/wordmap.h @@ -73,6 +73,7 @@ class Wordmap Wordmap(LEDMatrix* matrix); + bool setColour(uint8_t red, uint8_t green, uint8_t blue); bool setWord(Language_t lang, string identifier, bool value); protected: @@ -93,6 +94,10 @@ class Wordmap void createList_NL(void); void createList_EN(void); + uint8_t red; + uint8_t green; + uint8_t blue; + }; diff --git a/code/main/main.cpp b/code/main/main.cpp index 99ec32f..6956acd 100644 --- a/code/main/main.cpp +++ b/code/main/main.cpp @@ -43,6 +43,9 @@ #include "clock.h" #include "clockwordmap.h" +#include "daywordmap.h" +#include "temperaturewordmap.h" +#include "temperature.h" // -------------------------------------------------------------------------------------------------------------------- @@ -80,11 +83,11 @@ static rmt_encoder_handle_t led_encoder = NULL; static LEDMatrix_Parameters_t ledmatrix_parameters = { - LEDMATRIX_ORIENTATION_ROW_RIGHT_LEFT, + LEDMATRIX_ORIENTATION_ROW_LEFT_RIGHT, LEDMATRIX_ORIENTATION_COLUM_UP_DOWN, - LEDMATRIX_ORIENTATION_COLUM, - 11, - 10, + LEDMATRIX_ORIENTATION_ROW, + 20, + 13, &led_chan, &led_encoder, &tx_config @@ -93,6 +96,8 @@ static LEDMatrix_Parameters_t ledmatrix_parameters = static LEDMatrix matrix(&ledmatrix_parameters); static ClockWordmap clockWordmap(&matrix); +static DayWordmap dayWordmap(&matrix); +static TemperatureWordmap tempWordmap(&matrix); static gptimer_handle_t matrixRefreshTimer = NULL; @@ -209,6 +214,8 @@ extern "C" void app_main(void) // Set the sensor to NORMAL mode bmp280.setSensorMode(BMP280::BMP280_Mode_t::NORMAL); + Temperature temperature; + //-------------------------------------------- // LED Matrix // @@ -255,28 +262,49 @@ extern "C" void app_main(void) Clock clock(Clock::mode::TEN_BEFORE_HALF); - countdown(200); + clockWordmap.setColour(0xFF, 0x00, 0xFF); + dayWordmap.setColour(0x20, 0xFF, 0x80); + tempWordmap.setColour(0x40, 0x40, 0xFF); - list wordlist; + countdown(1000); + + list clockWordlist; + list tempWordList; while (true) { - clock.generateWordlist(&wordlist); + clock.generateWordlist(&clockWordlist); + matrix.clear(); std::list::iterator it; - for(it = wordlist.begin(); it != wordlist.end(); it++) + for(it = clockWordlist.begin(); it != clockWordlist.end(); it++) { clockWordmap.setWord(Wordmap::Language_t::NL, *it, true); + dayWordmap.setWord(Wordmap::Language_t::NL, *it, true); + } + + // Get the temperature from sensor + int currentTemperature = bmp280.getTemperature(); + currentTemperature = 19; +// LOGGER_INFO("The current temperature is: %i", temperature); + // Generate temperature wordlist + temperature.generateWordlist(currentTemperature, &tempWordList); + for(it = tempWordList.begin(); it != tempWordList.end(); it++) + { + tempWordmap.setWord(Wordmap::Language_t::NL, *it, true); } // Add a seconds indicator - matrix.setPixelValue(10, 9, clock.getTime() % 2); + matrix.setPixelValue(11, 11, clock.getTime() % 2); + // Update the matrix + matrix.tick(); // Update the clock every second (1000 ms) vTaskDelay(1000); + } } @@ -296,22 +324,43 @@ static void devTask(void* parameters) static void colourMapTask(void* parameters) { - uint8_t red = 0x10; - uint8_t green = 0; - uint8_t blue = 0x04; + uint8_t red = 0xF0; + uint8_t green = 0x20; + uint8_t blue = 0xF0; + +// uint8_t red = 0x00; +// uint8_t green = 0x00; +// uint8_t blue = 0x00; uint32_t counter = 0; while (true) { - matrix.setGlobalColour(red, green, blue); +// red = 0; +// green = 0; +// blue = 0; +// if ((counter % 2) == 0) +// { +// red = 0xFF; +// } +// if ((counter % 5) == 0) +// { +// green = 0xFF; +// } +// if ((counter % 9) == 0) +// { +// blue = 0xFF; +// } + + +// matrix.setGlobalColour(red, green, blue); // red = counter & 0xFF; // green = (counter >> 8) & 0xFF; // blue = (counter >> 16) & 0xFF; -// counter++; - vTaskDelay(30); + counter++; + vTaskDelay(200); } } @@ -354,7 +403,7 @@ static bool IRAM_ATTR timerCallback(gptimer_handle_t timer, const gptimer_alarm_ { BaseType_t xHigherPriorityTaskWoken = pdFALSE; - xHigherPriorityTaskWoken = matrix.tick(); +// xHigherPriorityTaskWoken = matrix.tick(); return xHigherPriorityTaskWoken == pdTRUE; } diff --git a/code/main/src/bmp280.cpp b/code/main/src/bmp280.cpp index f223bfd..d1294f2 100644 --- a/code/main/src/bmp280.cpp +++ b/code/main/src/bmp280.cpp @@ -114,6 +114,16 @@ bool BMP280::setSensorTemperatureOversampling(BMP280_Oversampling_t oversampling return returnValue; } +int BMP280::getTemperature(void) +{ + // Get latest raw values from device + BMP280::getTemperatureValues(); + // Calculate temperature + BMP280::compensateTemperature(); + // return the value + return temperature; +} + void BMP280::resetDriver(void) { @@ -150,6 +160,16 @@ void BMP280::getCompensationValues(void) LOGGER_DEBUG("Got compensation values: %04X %04X %04X", compensationParameters.dig_T1, compensationParameters.dig_T2, compensationParameters.dig_T3); } +void BMP280::getPreasureValues(void) +{ + bus->read_register(slaveAddress, ADDRESS_REG_PRESSURE_LSB, (uint8_t*)&memorymap.pressure_raw, sizeof(memorymap.pressure_raw)); +} + +void BMP280::getTemperatureValues(void) +{ + bus->read_register(slaveAddress, ADDRESS_REG_TEMPERATURE_MSB, (uint8_t*)&memorymap.temperature_raw, sizeof(memorymap.temperature_raw)); +} + void BMP280::compensateTemperature(void) { int adc_T = 0; diff --git a/code/main/src/clock.cpp b/code/main/src/clock.cpp index a75510a..98be908 100644 --- a/code/main/src/clock.cpp +++ b/code/main/src/clock.cpp @@ -74,8 +74,8 @@ void Clock::generateWordlist(list* wordlist) // currentTime += 100; localtime_r(¤tTime, &tm); - LOGGER_INFO("%lld\n\r", currentTime); - LOGGER_INFO("%02i:%02i:%02i\n\r", tm.tm_hour, tm.tm_min, tm.tm_sec); +// LOGGER_INFO("%lld\n\r", currentTime); +// LOGGER_INFO("%02i:%02i:%02i\n\r", tm.tm_hour, tm.tm_min, tm.tm_sec); wordlist->clear(); wordlist->push_back("it"); @@ -154,6 +154,34 @@ void Clock::generateWordlist(list* wordlist) wordlist->push_back("almost"); wordlist->push_back("hours"); } + + // Attach the day as a word, too + switch (tm.tm_wday) + { + case 0: + wordlist->push_back("sunday"); + break; + case 1: + wordlist->push_back("monday"); + break; + case 2: + wordlist->push_back("tuesday"); + break; + case 3: + wordlist->push_back("wednesday"); + break; + case 4: + wordlist->push_back("thursday"); + break; + case 5: + wordlist->push_back("friday"); + break; + case 6: + wordlist->push_back("saturday"); + break; + default: + wordlist->push_back("sunday"); + } } diff --git a/code/main/src/clockwordmap.cpp b/code/main/src/clockwordmap.cpp index f1e19cc..7cf7096 100644 --- a/code/main/src/clockwordmap.cpp +++ b/code/main/src/clockwordmap.cpp @@ -89,7 +89,7 @@ void ClockWordmap::createList_NL(void) wordlist[NL].push_back((struct word){"eleven", {{8,8},{9,8},{10,8}}}); wordlist[NL].push_back((struct word){"twelve", {{0,9},{1,9},{2,9},{3,9},{4,9},{5,9}}}); - wordlist[NL].push_back((struct word){"hours", {{7,9},{8,9},{9,9}}}); + wordlist[NL].push_back((struct word){"hours", {{8,9},{9,9},{10,9}}}); } diff --git a/code/main/src/daywordmap.cpp b/code/main/src/daywordmap.cpp new file mode 100644 index 0000000..27bb1b2 --- /dev/null +++ b/code/main/src/daywordmap.cpp @@ -0,0 +1,76 @@ +// -------------------------------------------------------------------------------------------------------------------- +/// \file daywordmap.cpp +/// \brief Description +// -------------------------------------------------------------------------------------------------------------------- +// +// vbchaos software design +// +// -------------------------------------------------------------------------------------------------------------------- +/// $Revision: $ +/// $Author: $ +/// $Date: $ +// (c) 2023 vbchaos +// -------------------------------------------------------------------------------------------------------------------- + + +// -------------------------------------------------------------------------------------------------------------------- +// Include files +// -------------------------------------------------------------------------------------------------------------------- + +#include "daywordmap.h" + +#include "logger.h" + +// -------------------------------------------------------------------------------------------------------------------- +// Constant and macro definitions +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Type definitions +// -------------------------------------------------------------------------------------------------------------------- + + +// -------------------------------------------------------------------------------------------------------------------- +// File-scope variables +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Function declarations +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Function definitions +// -------------------------------------------------------------------------------------------------------------------- + + +DayWordmap::DayWordmap(LEDMatrix* matrix) : Wordmap(matrix) +{ + createList_NL(); + createList_EN(); +} + +void DayWordmap::createList_NL(void) +{ + // First, clear the list + wordlist[NL].clear(); + + // Now lets add all relevant words + wordlist[NL].push_back((struct word){"monday", {{0,12},{1,12},{2,12},{3,12},{4,12},{5,12},{6,12}}}); + wordlist[NL].push_back((struct word){"tuesday", {{13,12},{14,12},{15,12},{16,12},{17,12},{18,12},{19,12}}}); + wordlist[NL].push_back((struct word){"wednesday", {{11,10},{12,10},{13,10},{14,10},{15,10},{16,10},{17,10},{18,10}}}); + wordlist[NL].push_back((struct word){"thursday", {{2,11},{3,11},{4,11},{5,11},{6,11},{7,11},{8,11},{9,11},{10,11}}}); + wordlist[NL].push_back((struct word){"friday", {{12,11},{13,11},{14,11},{15,11},{16,11},{17,11},{18,11}}}); + wordlist[NL].push_back((struct word){"saturday", {{0,10},{1,10},{2,10},{3,10},{4,10},{5,10},{6,10},{7,10}}}); + wordlist[NL].push_back((struct word){"sunday", {{7,12},{8,12},{9,12},{10,12},{11,12},{12,12}}}); + +} + + + + diff --git a/code/main/src/ledmatrix.cpp b/code/main/src/ledmatrix.cpp index ac313b8..d63ce0c 100644 --- a/code/main/src/ledmatrix.cpp +++ b/code/main/src/ledmatrix.cpp @@ -79,8 +79,8 @@ bool LEDMatrix::setPixelValue(unsigned int colum, unsigned int row, bool value) { bool returnValue = true; - unsigned int rowC = 0; - unsigned int colC = 0; +// unsigned int rowC = 0; +// unsigned int colC = 0; unsigned int pixelAddress = 0; if ((row < parameters.height) && (colum < parameters.width)) @@ -95,6 +95,101 @@ bool LEDMatrix::setPixelValue(unsigned int colum, unsigned int row, bool value) if (returnValue) { +// // Determine the actual row coordinate based on the matrix orientation +// if (parameters.columOrientation == LEDMATRIX_ORIENTATION_COLUM_UP_DOWN) +// { +// rowC = row; +// } +// else if (parameters.columOrientation == LEDMATRIX_ORIENTATION_COLUM_DOWN_UP) +// { +// rowC = (parameters.height - 1) - row; +// } +// +// // Determine the actual row coordinate based on the matrix orientation +// if (parameters.rowOrientation == LEDMATRIX_ORIENTATION_ROW_LEFT_RIGHT) +// { +// colC = colum; +// } +// else if (parameters.rowOrientation == LEDMATRIX_ORIENTATION_ROW_RIGHT_LEFT) +// { +// colC = (parameters.width - 1) - colum; +// } +// +// // Calculate the pixel address in the pixel array based on the previous information +// if (parameters.matrixOrientation == LEDMATRIX_ORIENTATION_COLUM) +// { +// pixelAddress = rowC + (colC * parameters.height); +// } +// else if (parameters.matrixOrientation == LEDMATRIX_ORIENTATION_ROW) +// { +// pixelAddress = (rowC * parameters.width) + colC; +// } + + pixelAddress = LEDMatrix::findPixelIndexFromCoordinates(colum, row); + + // Update the pixel value + matrix[pixelAddress].on = value; + + } + return returnValue; +} + + + + + +void LEDMatrix::setGlobalColour(uint8_t red, uint8_t green, uint8_t blue) +{ + for (int i = 0; i < numberOfPixels; i++) + { + matrix[i].red = red; + matrix[i].green = green; + matrix[i].blue = blue; + } +} + +void LEDMatrix::setPixelColour(unsigned int colum, unsigned int row, uint8_t red, uint8_t green, uint8_t blue) +{ + unsigned int index; + + index = LEDMatrix::findPixelIndexFromCoordinates(colum, row); + + matrix[index].red = red; + matrix[index].green = green; + matrix[index].blue = blue; +} + + +void LEDMatrix::clear(void) +{ + for (int i = 0; i < numberOfPixels; i++) + { + matrix[i].on = false; + } + +} + + +unsigned int LEDMatrix::findPixelIndexFromCoordinates(unsigned int colum, unsigned int row) +{ + bool returnValue = true; + + unsigned int index = 0; + + unsigned int rowC = 0; + unsigned int colC = 0; + + if ((row < parameters.height) && (colum < parameters.width)) + { + returnValue = true; + } + else + { + returnValue = false; + } + + if (returnValue) + { // Determine the actual row coordinate based on the matrix orientation if (parameters.columOrientation == LEDMATRIX_ORIENTATION_COLUM_UP_DOWN) { @@ -118,35 +213,14 @@ bool LEDMatrix::setPixelValue(unsigned int colum, unsigned int row, bool value) // Calculate the pixel address in the pixel array based on the previous information if (parameters.matrixOrientation == LEDMATRIX_ORIENTATION_COLUM) { - pixelAddress = rowC + (colC * parameters.height); + index = rowC + (colC * parameters.height); + } + else if (parameters.matrixOrientation == LEDMATRIX_ORIENTATION_ROW) + { + index = (rowC * parameters.width) + colC; } - - // Update the pixel value - matrix[pixelAddress].on = value; - } - return returnValue; -} - - -void LEDMatrix::setGlobalColour(uint8_t red, uint8_t green, uint8_t blue) -{ - for (int i = 0; i < numberOfPixels; i++) - { - matrix[i].red = red; - matrix[i].green = green; - matrix[i].blue = blue; - } -} - - -void LEDMatrix::clear(void) -{ - for (int i = 0; i < numberOfPixels; i++) - { - matrix[i].on = false; - } - + return index; } @@ -178,6 +252,7 @@ void LEDMatrix::matrixTask(void* parameters) } rmt_transmit(*ledmatrix->parameters.rmtChannel, *ledmatrix->parameters.rmtEncoder, matrix, sizeof(matrix), ledmatrix->parameters.rmtConfig); + } } diff --git a/code/main/src/temperature.cpp b/code/main/src/temperature.cpp new file mode 100644 index 0000000..d79bfbd --- /dev/null +++ b/code/main/src/temperature.cpp @@ -0,0 +1,76 @@ +// -------------------------------------------------------------------------------------------------------------------- +/// \file temperature.cpp +/// \brief Description +// -------------------------------------------------------------------------------------------------------------------- +// +// vbchaos software design +// +// -------------------------------------------------------------------------------------------------------------------- +/// $Revision: $ +/// $Author: $ +/// $Date: $ +// (c) 2023 vbchaos +// -------------------------------------------------------------------------------------------------------------------- + + +// -------------------------------------------------------------------------------------------------------------------- +// Include files +// -------------------------------------------------------------------------------------------------------------------- + +#include "temperature.h" + +// -------------------------------------------------------------------------------------------------------------------- +// Constant and macro definitions +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Type definitions +// -------------------------------------------------------------------------------------------------------------------- + + +// -------------------------------------------------------------------------------------------------------------------- +// File-scope variables +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Function declarations +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Function definitions +// -------------------------------------------------------------------------------------------------------------------- + + +Temperature::Temperature() +{ + +}; + + +void Temperature::generateWordlist(int temperature, list* wordlist) +{ + // Clear the list + wordlist->clear(); + + // Add fixed preamble + wordlist->push_back("it"); + wordlist->push_back("is"); + + // Temperature value to string + wordlist->push_back(to_string(temperature)); + + // Add fixed postamble + wordlist->push_back("degrees"); + + + + +} + + diff --git a/code/main/src/temperaturewordmap.cpp b/code/main/src/temperaturewordmap.cpp new file mode 100644 index 0000000..296c6dd --- /dev/null +++ b/code/main/src/temperaturewordmap.cpp @@ -0,0 +1,95 @@ +// -------------------------------------------------------------------------------------------------------------------- +/// \file temperaturewordmap.cpp +/// \brief Description +// -------------------------------------------------------------------------------------------------------------------- +// +// vbchaos software design +// +// -------------------------------------------------------------------------------------------------------------------- +/// $Revision: $ +/// $Author: $ +/// $Date: $ +// (c) 2023 vbchaos +// -------------------------------------------------------------------------------------------------------------------- + + +// -------------------------------------------------------------------------------------------------------------------- +// Include files +// -------------------------------------------------------------------------------------------------------------------- + +#include "temperaturewordmap.h" + +#include "logger.h" + +// -------------------------------------------------------------------------------------------------------------------- +// Constant and macro definitions +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Type definitions +// -------------------------------------------------------------------------------------------------------------------- + + +// -------------------------------------------------------------------------------------------------------------------- +// File-scope variables +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Function declarations +// -------------------------------------------------------------------------------------------------------------------- + + + +// -------------------------------------------------------------------------------------------------------------------- +// Function definitions +// -------------------------------------------------------------------------------------------------------------------- + + +TemperatureWordmap::TemperatureWordmap(LEDMatrix* matrix) : Wordmap(matrix) +{ + createList_NL(); + createList_EN(); +} + +void TemperatureWordmap::createList_NL(void) +{ + // First, clear the list + wordlist[NL].clear(); + + // Now lets add all relevant words + wordlist[NL].push_back((struct word){"it", {{14,0},{15,0},{16,0}}}); + wordlist[NL].push_back((struct word){"is", {{18,0},{19,0}}}); + + wordlist[NL].push_back((struct word){"above", {{11,1},{12,1},{13,1},{14,1},{15,1},{18,2},{19,2}}}); + wordlist[NL].push_back((struct word){"below", {{12,2},{13,2},{14,2},{15,2},{16,2},{18,2},{19,2}}}); + + // Tenth + wordlist[NL].push_back((struct word){"14", {{11,4},{12,4},{13,4},{14,4},{16,7},{17,7},{18,7},{19,7}}}); + wordlist[NL].push_back((struct word){"15", {{15,4},{16,4},{17,4},{18,4},{16,7},{17,7},{18,7},{19,7}}}); + wordlist[NL].push_back((struct word){"16", {{11,5},{12,5},{13,5},{16,7},{17,7},{18,7},{19,7}}}); + wordlist[NL].push_back((struct word){"17", {{14,4},{15,4},{16,4},{17,4},{18,4},{16,7},{17,7},{18,7},{19,7}}}); + wordlist[NL].push_back((struct word){"18", {{11,6},{12,6},{13,6},{14,6},{16,7},{17,7},{18,7},{19,7}}}); + wordlist[NL].push_back((struct word){"19", {{15,6},{16,6},{17,6},{18,6},{19,6},{16,7},{17,7},{18,7},{19,7}}}); + + // Twentieth + wordlist[NL].push_back((struct word){"20", {{11,8},{12,8},{13,8},{14,8},{15,8},{16,8},{17,8}}}); + wordlist[NL].push_back((struct word){"21", {{13,3},{14,3},{15,3},{12,7},{13,7},{11,8},{12,8},{13,8},{14,8},{15,8},{16,8},{17,8}}}); + wordlist[NL].push_back((struct word){"22", {{11,3},{12,3},{13,3},{14,3},{12,7},{13,7},{11,8},{12,8},{13,8},{14,8},{15,8},{16,8},{17,8}}}); + wordlist[NL].push_back((struct word){"23", {{16,3},{17,3},{18,3},{19,7},{13,7},{11,8},{12,8},{13,8},{14,8},{15,8},{16,8},{17,8}}}); + wordlist[NL].push_back((struct word){"24", {{11,4},{12,4},{13,4},{14,4},{12,7},{13,7},{11,8},{12,8},{13,8},{14,8},{15,8},{16,8},{17,8}}}); + wordlist[NL].push_back((struct word){"25", {{15,4},{16,4},{17,4},{18,4},{12,7},{13,7},{11,8},{12,8},{13,8},{14,8},{15,8},{16,8},{17,8}}}); + wordlist[NL].push_back((struct word){"26", {{11,5},{12,5},{13,5},{12,7},{13,7},{11,8},{12,8},{13,8},{14,8},{15,8},{16,8},{17,8}}}); + wordlist[NL].push_back((struct word){"27", {{14,4},{15,4},{16,4},{17,4},{18,4},{12,7},{13,7},{11,8},{12,8},{13,8},{14,8},{15,8},{16,8},{17,8}}}); + wordlist[NL].push_back((struct word){"28", {{11,6},{12,6},{13,6},{14,6},{12,7},{13,7},{11,8},{12,8},{13,8},{14,8},{15,8},{16,8},{17,8}}}); + wordlist[NL].push_back((struct word){"29", {{15,6},{16,6},{17,6},{18,6},{19,6},{12,7},{13,7},{11,8},{12,8},{13,8},{14,8},{15,8},{16,8},{17,8}}}); + + wordlist[NL].push_back((struct word){"degrees", {{14,9},{15,9},{16,9},{17,9},{18,9},{19,9}}}); +} + + + + diff --git a/code/main/src/wordmap.cpp b/code/main/src/wordmap.cpp index 3f7c385..7256638 100644 --- a/code/main/src/wordmap.cpp +++ b/code/main/src/wordmap.cpp @@ -52,6 +52,9 @@ Wordmap::Wordmap(LEDMatrix* matrix) { Wordmap::matrix = matrix; Wordmap::language = NL; + Wordmap::red = 0xFF; + Wordmap::green = 0xFF; + Wordmap::blue = 0xFF; } bool Wordmap::setWord(Language_t lang, string identifier, bool value) @@ -91,12 +94,26 @@ bool Wordmap::setWord(Language_t lang, string identifier, bool value) for (pixel = it->pixels.begin(); pixel != it->pixels.end(); pixel++) { matrix->setPixelValue(pixel->x, pixel->y, value); + matrix->setPixelColour(pixel->x, pixel->y, Wordmap::red, Wordmap::green, Wordmap::blue); } } return returnValue; } + +bool Wordmap::setColour(uint8_t red, uint8_t green, uint8_t blue) +{ + bool returnValue = true; + + Wordmap::red = red; + Wordmap::green = green; + Wordmap::blue = blue; + + return returnValue; +} + + void Wordmap::createList_NL(void) { // First, clear the list diff --git a/doc/matrix.ods b/doc/matrix.ods index 03ec4ec95022e1770b1bac9679f8b94bc6e6edfe..84e5fa1bf523b15c5b1449b317f005f46850f990 100644 GIT binary patch delta 5597 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 a5a`;!h`w-Q<~Xin(zu~``d1NvK>qGb7} zki{L!+Su5It)dt9ubBiw_{TdhsJk1tUgZr@Sutx84?GT5-q|`cRXAnTLPyCXaz5DG z*z>SX98KM`uNV$TVFpi2={<_BB)UYKDJ9KX-DF8?15x z`U&hLzMTxs#QO8jGxJ<}iDS39?J`!UMUn2kyk1yTd1UbW(4dnX!2!l5r28ckN(CMl z6xW7!hh2BmHu7V&TLLSZa_TzEzqXC|&k!ZI>Q=WP)_gvC4dezWTzFS-tQNd)Q=)m! zL6~oIyLn!-Xo|cB>k{->f1xD3oBc9j6Y@ZVkVuj_B)$j;09fGy0KfjAzx(NkKT7bk zpLap5Xx1UuO>y`63X643&ls;tK*>nSQ2lv5?l(q-(%{gU(3L8?PTsT~!v4d0 zG}jy@Jp4rNrJUar11JCmQjlNoD5Z}%IjkzYxg}Kvi>4@GtlioU$Q3)Wf=*UtlS@_g zu+5Qq)~uBR3UWy4aMzkRoi)bWK#7r>6jkptFQ9S}&pK7yX>JTH3(sRogKa%;r0+eW zaOLMdnezzP+fK>fyGvv90+&7OlU~jzv_&kjHUZl`5+xUxk3rGrW@kH%zK4ZA=XA=| zTy1stRFmUih65%CeuS)OYUPYgguF#xd1FWPY*1}L(;2w0<9u#WIz{nzbh>e7tZO9& zGUJ$ehbHO%lG)pRS7ZdeE$gdDGQld1mg!PxSNK$sSqsk{f+r>nRVZT%I(C#p z+Vo(CD0D@&Q4%0C!joLeevDZFk2t{ zOSzTS=SA);(sWA}5GwHyV)sDUT@I

3(gtQ=g4*D_x;3*J97e5_BV59gHd&I^h69 zxRAT=!PktU?((J=zH5nXM{-`8=myKwbw7O0?p}ln0n^i~3yo_+3eJPiK*ZaRd$eJz zUp`QUp}bN9d6;A4aFmvH!v#l}JIrp+dI-J^6SKP`CJpzhJtg(Udi)65PzfZpvY~__FWPQ)!54;T}_}PTcfoR}QbIFau5EiJ2;G+3_HIT; zq>{cU<;bge6B&0{>9OgkL6Zr7WvlW~fSK(3 zLx!BxGpqK`G3&?e$UB#NQ+Jj4o)cx^Q0n1>vq+Q{#3Llp?<%a~K4U&TF^3r>srOxy zfS`U3rabuM&K%4^$_|A4cJcDlr{H<;Kol8|6Pfg4LyFkyz$+xf%TuCc zA+}6v`F6LJCXD#CP8CFFHS+DiN)t-_TI33%vTFGox)BAhy+tFzFG)CGnh~61C=Ln@ z96ehipYmPHG_hXKaClIS(+oVpPJp!DnZ;}&*GJHiwwyJ#+DfDs6C;tf*@#aW5gzt? zlR92^z$p(O&K28-T^W>zQY~!ov1lCmW|9PXeK5usw1-({@APi9t4F{`X44#uX85I2 zin$2IX44QNoQ8cB=3NrHgGsrG{Jnm98ZOgfn!;p_R7>OK*MGbzZxFZ=?#;y>EirlM z6+A^}bQtO1dZ_Ty*}WWos{VYnxH?2e)`~woIDVO$aV7b$MgFopf*3Ie)We}D`V>Ty zREM#yS5lYOyMsfwziNzYoVYyiC<}<8WUqYf4TT_CXRe{DP6v>NXt1H)mSa2O-s8kf z#Ey*0h+nS*!m?C)uOMmDeTwM)OwxOP`|Vd~vN&dAzE%&oo&1YQt=+b{97i(r1C4Hn z%-px?Yxb*0Hr%vTJnFB_KG{7TsrFGs#pt12Nh@7Nz)ezt2y97HYc{QO*)%5EEr^uH z%sq4A05=bA93`}-RqTKGR za7KTn3A?!9FU>gb;Nra|+2^bAXa?1PsS&1O9@JsZ?SD_FM&e3X;g75+i7S61Y3neS z)prj+xLOq^3w4xF+1iqtG&7T}Hs-=u1f8B|9C-&P-<}JzaYv z)3~Be1eQ_7Q*68{Z~>3A zAw5gdl-M3E>{(f5jd*8!V-8c=%7fuJfn!h~-jThKDMuYE$!* z*T5g=ygZ9+(-L9;U}EHd&Uu&8Lf4h17;w+~JV)7A{Crg9WTAG7Q-@xp# zR#;tG*)B}Ae1)St;`7Z6_9k zDaV@1#b{R)OV^uNZ+_gp=E;_-Be;;iI&%DEWxQFhFB5k5=}i+~(ilx80Wqi9njKEs zp__`klK=AhA>S^^y*dHtV;bT}%b)~)EC4N`mblh`EgB(nL}MDvEQ~HL2!U|2U(iN{ zgdBIA-jK);_xWhYSV-RESns>73(@5RG2vZBF${~U?+e@k9A#GW#-_cGa++m`?4^u*i*8trUxzr``N4F6Gek5T7H zVSd%N3%t8{)dfDQK8Qvd^ljo>MhE#TmJ_+j21buW@;VyrTs5byEYW9Q-*mTJcqp+O z9vP6g|DFRuD`GBhvDuEg>qGSoQlu%Le*YZrNeD=p(^R^3LVL}$B5=~4gVzdNx2D@s z$PgQN1`lV3CD2is+JUmnho;pwT1gwHEn+lZ#qI4qXSmNO_W`{b$VH-H_*zGXFC*Vw znq#0mf9SqsH(xx-L7sirJ%ZB7#7I9Yx&jWdCiPIq=EF9dx}k3R;%UXjS=-$Sv84Q6 z2|TlHU(?M$zjTu&?HXuM24?sRAUEEWxp_1XE&-|Zj)Q}@Rc@(u6-;JufKts)l}fmd z2}e~!d^$iq(jfHIiFVML8VwA<&c{NzsvKSP*75Rv^Z%bSxfMuwQ3Cb)v@^$}NGLnR&8(bY3t z4k=|h7Nf*sS>)7b7u(dI1leJU+>KVd-+I1e#||7)e_nfJQr_RERWe6I*Q@-^Pj^gRApn2`@b3$S4*bKG{>q^La5(9{=eBltw{t@NC;RU%7|ixMPyookhkU;o{u3F^ dgs~9*RePi`Gfo#@f*?JnRhWW6T;K=q{{ZH8ank?*