Я пытаюсь получить эту библиотеку 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) и работает без ошибок — но все светодиоды остаются темными 🙁
Я не вижу никаких проблем и удивляюсь, что я делаю не так?
Любая помощь очень ценится.
Спасибо!
Просто сам нашел проблему и обнаружил, что инициализация структуры ledstrig была неправильной.
Правильный должен выглядеть так:
ws2811_t ledstring =
{
0,
0,
TARGET_FREQ,
DMA,
GPIO_PIN, 0, LED_COUNT, 125, STRIP_TYPE,
0
};
Я до сих пор не понимаю, как работает эта инициализация, но по крайней мере эта дает правильные значения в требуемых полях.
Других решений пока нет …