我正在尝试为arduino编写一些c代码,通过使用切换变量在两个不同的函数之间交替。任何人都可以帮我做这个工作吗?
int hold = 1;
void setup() {
}
void loop() {
Serial.println(hold);
if (hold == 1){
hold = 2;
}
if (hold == 2){
hold = 1;
}
}
答案 0 :(得分:2)
这样的东西?
int hold = 1;
// ...
if (hold)
functionA();
else
functionB();
hold = !hold;
修改强>
以下是另外两种方法。第一个更简单,使用switch
语句,这实际上只是另一种方式if...else..
#include <stdio.h>
#define NUMFUNCS 4
int funcA(void);
int funcB(void);
int funcC(void);
int funcD(void);
int main(void){
int action = 0;
int res;
while(1) {
switch(action) {
case 0: res = funcA();
break;
case 1: res = funcB();
break;
case 2: res = funcC();
break;
default: res = funcD();
break;
}
printf ("Function returned %d\n", res);
action = (action + 1) % NUMFUNCS;
}
return 0;
}
int funcA(void) {
return 1;
}
int funcB(void) {
return 2;
}
int funcC(void) {
return 3;
}
int funcD(void) {
return 4;
}
通过使用函数指针数组稍微复杂一点。如果要将参数传递给函数,则还需要更改数组声明。缺点是除非你有可变函数,否则它们都必须具有相同的参数。
#include <stdio.h>
#define NUMFUNCS 4
int funcA(void);
int funcB(void);
int funcC(void);
int funcD(void);
int (*funcarry[NUMFUNCS])(void) = { // array of function pointers
funcA, funcB, funcC, funcD
};
int main(void){
int action = 0;
int res;
while(1) {
res = (*funcarry[action])();
printf ("Function returned %d\n", res);
action = (action + 1) % NUMFUNCS;
}
return 0;
}
int funcA(void) {
return 1;
}
int funcB(void) {
return 2;
}
int funcC(void) {
return 3;
}
int funcD(void) {
return 4;
}