led — Получение библиотеки rpi_ws281x и ее запуск в Stack Overflow

Я пытаюсь получить эту библиотеку jgarff / rpi_ws281x и запустить и установить его, как описано в readme.md

При запуске примеров Python полоса работает, как и ожидалось, но я не получаю код C ++ и работает.

Вот что я пытаюсь:

    #include <boost/filesystem.hpp>
#include <boost/range/iterator_range.hpp>
#include <boost/thread.hpp>
#include <boost/chrono.hpp>
#include <iostream>
#include <stdio.h>
#include <wiringPiI2C.h>
#include <rpi_ws281x/ws2811.h>
#include <cstdint>

/*
Defines für ws2811 LED Stripes
*/

#define TARGET_FREQ                             WS2811_TARGET_FREQ
#define GPIO_PIN                                18
#define DMA                                     5
#define STRIP_TYPE                              WS2811_STRIP_RGB        // WS2812/SK6812RGB integrated chip+leds
//#define STRIP_TYPE                            WS2811_STRIP_GBR        // WS2812/SK6812RGB integrated chip+leds
//#define STRIP_TYPE                            SK6812_STRIP_RGBW       // SK6812RGBW (NOT SK6812RGB)
#define LED_COUNT                               10

ws2811_led_t dotcolors[] =
{
0x00200000,  // red
0x00201000,  // orange
0x00202000,  // yellow
0x00002000,  // green
0x00002020,  // lightblue
0x00000020,  // blue
0x00100010,  // purple
0x00200010,  // pink
};

ws2811_led_t dotcolors_rgbw[] =
{
0x00200000,  // red
0x10200000,  // red + W
0x00002000,  // green
0x10002000,  // green + W
0x00000020,  // blue
0x10000020,  // blue + W
0x00101010,  // white
0x10101010,  // white + W

};

ws2811_t ledstring =
{
nullptr,
TARGET_FREQ,
DMA,

0, GPIO_PIN, 0, LED_COUNT, 255, STRIP_TYPE,
0

};

using namespace std;
using namespace boost;
using namespace boost::filesystem;

int main()
{
ws2811_init(&ledstring);

int c = 0;

for (int i = 0; i < LED_COUNT; i++)
{
if (ledstring.channel[0].strip_type == SK6812_STRIP_RGBW) {
ledstring.channel[0].leds[i] = dotcolors_rgbw[c];
}
else {
ledstring.channel[0].leds[i] = dotcolors[c];
}

c++;

ws2811_render(&ledstring);

if (c == sizeof(dotcolors))
{
c = 0;
}

usleep(1000000);
}
return 0;
}

Этот код компилируется нормально (с использованием -fpermissive) и работает без ошибок — но все светодиоды остаются темными 🙁

Я не вижу никаких проблем и удивляюсь, что я делаю не так?

Любая помощь очень ценится.
Спасибо!

0

Решение

Просто сам нашел проблему и обнаружил, что инициализация структуры ledstrig была неправильной.

Правильный должен выглядеть так:

ws2811_t ledstring =
{
0,
0,
TARGET_FREQ,
DMA,

GPIO_PIN, 0, LED_COUNT, 125, STRIP_TYPE,
0

};

Я до сих пор не понимаю, как работает эта инициализация, но по крайней мере эта дает правильные значения в требуемых полях.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]