Адресная светодиодная лента библиотеки W2812B в Cortex-M7 MCU - PullRequest
0 голосов
/ 14 октября 2019

Я настраиваю адресную светодиодную ленту (W2812B) в микроконтроллере NXP cortex-M7 для управления каждым отдельным светодиодом, например, для управления 20 светодиодами разного цвета или яркости, отправляя сигнал ШИМ. Используется один цифровой вывод PWM. Есть ли в cortex-m7 какая-нибудь адресная библиотека светодиодных лент?

Эта адресуемая библиотека светодиодных лент используется в ARM Cortex-m7. В прошлом я использовал библиотеку FastLED Arduino / AVR в качестве эталона, и я могу управлять только этими 20 светодиодами одного цвета или мигать другим цветом. Я не могу контролировать яркость RGB или HSV.

MCUXpresso IDE:

(led.h)

#include "fsl_common.h"

/*********************************************************
 * LED GPIO IOMUXC
 *********************************************************/

#define ADDRESSABLE_LED_GPIO_04            GPIO1
#define ADDRESSABLE_LED_GPIO_04_PIN        (2U)
#define ADDRESSABLE_LED_IOMUXC_04          IOMUXC_GPIO_AD_B0_02_GPIO1_IO02

#define ADDRESSABLE_LED_HIGH            GPIO_PinWrite(GPIO1,2U,1U)
#define ADDRESSABLE_LED_LOW             GPIO_PinWrite(GPIO1,2U,0U)
/*****************************************************************************
******************************************************************************/
void LED_GPIO_Config(void);

(led.c)

void ADDRESSABLE_LED_WRITE_LOW(void)
{
    ADDRESSABLE_LED_HIGH;
    ADDRESSABLE_LED_DELAY(1);
    ADDRESSABLE_LED_LOW;
    ADDRESSABLE_LED_DELAY(18);
}

void ADDRESSABLE_LED_Write_HIGH(void)
{
    ADDRESSABLE_LED_HIGH;
    ADDRESSABLE_LED_DELAY(18);
    ADDRESSABLE_LED_LOW;
    ADDRESSABLE_LED_DELAY(1);
}

void ADDRESSABLE_LED_WRITE_BYTE(uint32_t byte)
{
    uint8_t i;
    for(i=8; i>0; i--)
    {
        if(((byte>>i)&0x01) == 1)
        {
            ADDRESSABLE_LED_Write_HIGH();
        }else
        {
            ADDRESSABLE_LED_WRITE_LOW();

        }

        //ADDRESSABLE_LED_Write_HIGH();

    }
}

void ADDRESSABLE_LED_WRITE_COLOUR(uint32_t red, uint32_t green, uint32_t blue)
{
    ADDRESSABLE_LED_WRITE_BYTE(red);
    ADDRESSABLE_LED_WRITE_BYTE(green);
    ADDRESSABLE_LED_WRITE_BYTE(blue);
}

void ADDRESSABLE_LED_RED(void)
{
    uint8_t i;
    for(i=0; i<20; i++)
    {
        ADDRESSABLE_LED_WRITE_COLOUR(0xFF,0,0);
    }
}

void ADDRESSABLE_LED_GREEN(void)
{
    uint8_t i;
    for(i=0; i<20; i++)
    {
        ADDRESSABLE_LED_WRITE_COLOUR(0xFF,0,0);
    }
}

void ADDRESSABLE_LED_BLUE(void)
{
    uint8_t i;
    for(i=0; i<20; i++)
    {
        ADDRESSABLE_LED_WRITE_COLOUR(0,0,0xFF);
    }
}

Этоадресная светодиодная лента (w2812B), которую я написал для простого управления 20 светодиодами одного цвета. Я ожидаю использовать лучшую библиотеку для управления ими, чтобы изменять цвет и яркость для каждого отдельного светодиода (например, использовать библиотеку FastLED arduino для удобного управления).

...