набрал несколько интересных эффектов с портала https://editor.soulmatelights.com/,
адаптировал их для GyverOS, в целом работает, но есть один раздражающий момент:
в Gyver для возврата индекса в ленте по координатам используется GetPixelNumber.
на портале же в скетчах используется функция XY, декларированная в colorutils.cpp из FastLED.
и вот здесь затык. если пытаться добавить XY в Gyver (в utility.ino) как копию функции GetPixelNumber или перименовать в коде скетчей XY на GetPixelNumber - вываливаются ошибки: FastLED-master\src/colorutils.cpp:487: undefined reference to `XY(unsigned char, unsigned char)'
Не понимаю в чем здесь дело.
так объявлена XY в FastLED:
вот такой код в Gyver (дублирование такую же функции с именем XY выдает ошибки).
пока прикрутил кривенький, но рабочий вариант из примеров FastLED, на который не вываливаются ошибки (на 100% не устраивает, т.к. некоторые эффекты перевернуты):
адаптировал их для GyverOS, в целом работает, но есть один раздражающий момент:
в Gyver для возврата индекса в ленте по координатам используется GetPixelNumber.
на портале же в скетчах используется функция XY, декларированная в colorutils.cpp из FastLED.
и вот здесь затык. если пытаться добавить XY в Gyver (в utility.ino) как копию функции GetPixelNumber или перименовать в коде скетчей XY на GetPixelNumber - вываливаются ошибки: FastLED-master\src/colorutils.cpp:487: undefined reference to `XY(unsigned char, unsigned char)'
Не понимаю в чем здесь дело.
так объявлена XY в FastLED:
C++:
// Forward declaration of the function "XY" which must be provided by
// the application for use in two-dimensional filter functions.
uint16_t XY( uint8_t, uint8_t);// __attribute__ ((weak));
C++:
uint16_t getPixelNumber(int8_t x, int8_t y) {
if ((THIS_Y % 2 == 0) || MATRIX_TYPE) { // если чётная строка
return (THIS_Y * _WIDTH + THIS_X);
} else { // если нечётная строка
return (THIS_Y * _WIDTH + _WIDTH - THIS_X - 1);
}
}
C++:
const bool kMatrixVertical = false;
uint16_t XY( uint8_t x, uint8_t y)
{
uint16_t i;
if (kMatrixVertical == false) {
if( y & 0x01) {
// Odd rows run backwards
uint8_t reverseX = (WIDTH - 1) - x;
i = (y * WIDTH) + reverseX;
} else {
// Even rows run forwards
i = (y * WIDTH) + x;
}
} else { // vertical positioning
if ( x & 0x01) {
i = HEIGHT * (WIDTH - (x+1))+y;
} else {
i = HEIGHT * (WIDTH - x) - (y+1);
}
}
return i;
}