制作arduino替代函数

时间:2015-09-15 22:58:29

标签: c arduino

我正在尝试为arduino编写一些c代码,通过使用切换变量在两个不同的函数之间交替。任何人都可以帮我做这个工作吗?

int hold = 1;
void setup() {
}

void loop() {
       Serial.println(hold);
     if (hold == 1){
     hold = 2;
       }
     if (hold == 2){
     hold = 1;
       }              
}

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;
}