Files
arduino/src/main/LedBar.cpp

127 lines
2.6 KiB
C++

#include "LedBar.h"
#include "../library/Adafruit_NeoPixel/Adafruit_NeoPixel.h"
#define pixel() ((Adafruit_NeoPixel *)this->pixels)
#if defined(ESP8266)
void LedBar::begin(Stream &debugStream) {
this->_debugStream = &debugStream;
this->begin();
}
#else
#endif
LedBar::LedBar(BoardType type) : _boardType(type) {}
/**
* @brief LED bar initialize
*
*/
void LedBar::begin(void) {
if (this->_isBegin) {
return;
}
/** Get board support package define */
this->_bsp = getBoardDef(this->_boardType);
if ((this->_bsp == nullptr) || (this->_bsp->LED.supported == false) ||
(this->_bsp->LED.rgbNum == 0)) {
AgLog("Board Not supported or LED not available on board");
return;
}
/** Init pixels */
this->pixels = new Adafruit_NeoPixel(
this->_bsp->LED.rgbNum, this->_bsp->LED.pin, NEO_GRB + NEO_KHZ800);
pixel()->begin();
pixel()->clear();
this->_isBegin = true;
AgLog("Initialize");
}
/**
* @brief Set LED color, if LED is on the color update immedietly. Otherwise
* must setOn to show LED color
*
* @param red Color Red (0 - 255)
* @param green Color Green (0 - 255)
* @param blue Color Blue (0 - 255)
* @param ledNum Index of LED from 0 to getNumberOfLeds() - 1
*/
void LedBar::setColor(uint8_t red, uint8_t green, uint8_t blue, int ledNum) {
if (this->ledNumInvalid(ledNum)) {
return;
}
pixel()->setPixelColor(ledNum, red, green, blue);
}
/**
* @brief Set LED brightness apply for all LED bar
*
* @param brightness Brightness (0 - 255)
*/
void LedBar::setBrighness(uint8_t brightness) {
if (this->isBegin() == false) {
return;
}
pixel()->setBrightness(brightness);
}
/**
* @brief Get number of LED on bar
*
* @return int Number of LED
*/
int LedBar::getNumberOfLeds(void) {
if (this->isBegin() == false) {
return 0;
}
return this->_bsp->LED.rgbNum;
}
bool LedBar::isBegin(void) {
if (this->_isBegin) {
return true;
}
AgLog("LED is not initialized");
return false;
}
bool LedBar::ledNumInvalid(int ledNum) {
if (this->isBegin() == false) {
return true;
}
if ((ledNum < 0) || (ledNum >= this->_bsp->LED.rgbNum)) {
AgLog("ledNum invalid: %d", ledNum);
return true;
}
return false;
}
void LedBar::setColor(uint8_t red, uint8_t green, uint8_t blue) {
for (int ledNum = 0; ledNum < this->_bsp->LED.rgbNum; ledNum++) {
this->setColor(red, green, blue, ledNum);
}
}
/**
* @brief Call to turn LED on/off base on the setting color
*
*/
void LedBar::show(void) {
if (pixel()->canShow()) {
pixel()->show();
}
}
/**
* @brief Set all LED to off color (r,g,b) = (0,0,0)
*
*/
void LedBar::clear(void) { pixel()->clear(); }