функция задержки на Arduino не работает должным образом - PullRequest
0 голосов
/ 01 октября 2018

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

void un_a()  //first third of ribbon length
{      
  for (uint16_t i = 0; i < N; i++) {
  strip.setPixelColor(i, strip.Color(100,255,100));
  }
  strip.show();
}

void deux_a()    //second third of ribbon length
{
  for (uint16_t i = N; i < 2*N; i++) {
    strip.setPixelColor(i, strip.Color(100,255,100));
  }
  strip.show();
}

void trois_a()    //last third of ribbon length
{
  for (uint16_t i = 2*N; i < 3*N; i++) {
    strip.setPixelColor(i, strip.Color(100,255,100));
  }
  strip.show();
}

void wave(){
  void un_a();
  delay(2000);
  void deux_a();
  delay(2000);
  void trois_a();
}

Поэтому, когда вызывается wave(), ожидаемое поведение:

  • 1/3 загорается,
  • после + -2с также загорается 2/3,
  • после + -2с загорается последняя треть.

На самом деле, это просто блокируети освещает часть первой трети.
Я ходил снова и снова, я не вижу, что мне не хватает.Любая подсказка?

1 Ответ

0 голосов
/ 01 октября 2018
void un_a();

Это объявление функции .Он сообщает, что такой символ un_a существует и является функцией типа void (*)().
. Если вы хотите вызвать функцию, вы используете выражение выражения .Обратите внимание, что у него нет возвращаемого типа в начале, как в объявлении:

int a; // declaration
a = 1; // statement
un_a(); // statement, this executed the un_a function
1 + 1; // another statement, this adds 1 + 1
int func(int b); // declaration, this does nothing, just the compiler knows that a function `func` exists
int (*(*func2)(int a, int (*(*)(int arr[a]))[a]))[5]; // another declaration
(void)func2(5, (int (* (*)(int *))[5])0); // statement

Попробуйте вызвать функции:

void wave(){
  un_a();
  delay(2000);
  deux_a();
  delay(2000);
  trois_a();
}
...