Arduino 上的延迟功能未按预期运行
delay function on Arduino doesn't behave as expected
我正在与 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 秒后,最后三分之一点亮。
实际上,它只是遮挡和点亮了第一个三分之一的一部分。
我一次又一次地四处走动,我看不出我错过了什么。有什么线索吗?
void un_a();
这是一个function declaration。它告诉我们,这样的符号 un_a
存在,并且它是类型 void (*)()
.
的函数
如果你想调用一个函数,你使用expresssion statement。请注意,它在开头没有像声明中那样的返回类型:
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();
}
我正在与 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 秒后,最后三分之一点亮。
实际上,它只是遮挡和点亮了第一个三分之一的一部分。
我一次又一次地四处走动,我看不出我错过了什么。有什么线索吗?
void un_a();
这是一个function declaration。它告诉我们,这样的符号 un_a
存在,并且它是类型 void (*)()
.
的函数
如果你想调用一个函数,你使用expresssion statement。请注意,它在开头没有像声明中那样的返回类型:
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();
}