我想寫一點arduino的c代碼,通過使用一個開關變量在兩個不同的函數之間交替。任何人都可以幫我做這個工作嗎?製作一個arduino替代函數
int hold = 1;
void setup() {
}
void loop() {
Serial.println(hold);
if (hold == 1){
hold = 2;
}
if (hold == 2){
hold = 1;
}
}
我想寫一點arduino的c代碼,通過使用一個開關變量在兩個不同的函數之間交替。任何人都可以幫我做這個工作嗎?製作一個arduino替代函數
int hold = 1;
void setup() {
}
void loop() {
Serial.println(hold);
if (hold == 1){
hold = 2;
}
if (hold == 2){
hold = 1;
}
}
是這樣的嗎?
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;
}
我需要通過4 +不同的事情,並選擇一個循環,所以我不認爲別的是一種選擇。除非我錯了。 – Warior4356
@ Warior4356我已經延長了我的答案。 –
switch語句解決了我的問題,謝謝。 – Warior4356
這樣會工作,但你需要使用'else if',否則,你將'hold'設置爲2,然後下一個'if'將會觸發並重新設置。 – slugonamission