Я работаю с адресуемой лентой с 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-й трети.
Я ходил снова и снова, я не вижу, что мне не хватает. Любая подсказка?
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();
}
Других решений пока нет …