2015-09-15 27 views
0

我想寫一點arduino的c代碼,通過使用一個開關變量在兩個不同的函數之間交替。任何人都可以幫我做這個工作嗎?製作一個arduino替代函數

int hold = 1; 
void setup() { 
} 

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

這樣會工作,但你需要使用'else if',否則,你將'hold'設置爲2,然後下一個'if'將會觸發並重新設置。 – slugonamission

回答

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

我需要通過4 +不同的事情,並選擇一個循環,所以我不認爲別的是一種選擇。除非我錯了。 – Warior4356

+0

@ Warior4356我已經延長了我的答案。 –

+0

switch語句解決了我的問題,謝謝。 – Warior4356