прошу помощи с функциями

sashok___

✩✩✩✩✩✩✩
15 Апр 2022
7
0
Добрый день, возникла такая проблема.
Имеется эффект "Pacifica" для ленты WS2812B.
Он состоит из нескольких функций, и я хочу вставить этот эффект в код для парных ламп.
Собственно что не так
C++:
void pacifica_one_layer( CRGBPalette16& p, uint16_t cistart, uint16_t wavescale, uint8_t bri, uint16_t ioff)
{
  uint16_t ci = cistart;
  uint16_t waveangle = ioff;
  uint16_t wavescale_half = (wavescale / 2) + 20;
  for( uint16_t i = 0; i < LED_AMOUNT; i++) {
    waveangle += 250;
    uint16_t s16 = sin16( waveangle ) + 32768;
    uint16_t cs = scale16( s16 , wavescale_half ) + wavescale_half;
    ci += cs;
    uint16_t sindex16 = sin16( ci) + 32768;
    uint8_t sindex8 = scale16( sindex16, 240);
    CRGB c = ColorFromPalette( p, sindex8, bri, LINEARBLEND);
    leds[i] += c;
  }
}
Это одна из функций из эффекта pacifica, и когда я вставляю эту функцию в функцию анимации выдает такую ошибку
1664839887406.png
1664839741531.png

Если честно я не понимаю в чем ошибка от слова совсем, и прошу объяснения.
 

DAK

★★★✩✩✩✩
8 Окт 2020
522
147
Функция требует 5 переменных, их надо указать
( CRGBPalette16& p, uint16_t cistart, uint16_t wavescale, uint8_t bri, uint16_t ioff)
Вы же не передаёте ни одного
 

sashok___

✩✩✩✩✩✩✩
15 Апр 2022
7
0
указал их, теперь выдает другую ошибку
1664891850149.png
1664891881689.png

вот так если что выглядит сама функция
C++:
void pacifica_one_layer( CRGBPalette16& p, uint16_t cistart, uint16_t wavescale, uint8_t bri, uint16_t ioff)
{
  uint16_t ci = cistart;
  uint16_t waveangle = ioff;
  uint16_t wavescale_half = (wavescale / 2) + 20;
  for( uint16_t i = 0; i < LED_AMOUNT; i++) {
    waveangle += 250;
    uint16_t s16 = sin16( waveangle ) + 32768;
    uint16_t cs = scale16( s16 , wavescale_half ) + wavescale_half;
    ci += cs;
    uint16_t sindex16 = sin16( ci) + 32768;
    uint8_t sindex8 = scale16( sindex16, 240);
    CRGB c = ColorFromPalette( p, sindex8, bri, LINEARBLEND);
    leds[i] += c;
  }
}
может я куда то не туда передаю эти переменные
 

DAK

★★★✩✩✩✩
8 Окт 2020
522
147
Так будет очень тяжело. Откуда берёте эту функцию? Без обид, но надо почитать уроки Гайвера. Надо почитать функции и классы
 

Старик Похабыч

★★★★★★★
14 Авг 2019
3,713
1,122
Москва
Это азы программирования.
Если функция объявлена как
int16_t foo(int8_t a)
{return a**}

то вызывать ее так:
int16_t b=foo(int8_t a)
неверно.
Надо так:
int16_t b=foo(3)
 

DAK

★★★✩✩✩✩
8 Окт 2020
522
147
Просто там в функцию передаётся ещё и указатель на класс. Думаю надо смотреть откуда и куда пихается, вдруг там даже невозможно будет это сделать.
 

sashok___

✩✩✩✩✩✩✩
15 Апр 2022
7
0
@DAK, к гайверу первым делом и полез,
Эта функция из примера для библиотеки fastLed
ну ладно, видимо тут что то очень простое в чем я просто не разобрался
буду пересматривать уроки.
 

DAK

★★★✩✩✩✩
8 Окт 2020
522
147
Тогда надо весь код смотреть. Брось сюда весь твой код, только оформи нормально. И ссылку на пример, на гитхабе, чтобы не гадать. Если всё красиво сделаешь, думаю тут точно помогут, а так, это как пальцем в небо тыкать... Надо к гадалке идти
 
  • Лойс +1
Реакции: sashok___