gpt4 book ai didi

c - 制作arduino备用功能

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:55 24 4
gpt4 key购买 nike

我正在尝试为 arduino 编写一些 c 代码,通过使用切换变量在两个不同的函数之间切换。谁能帮我完成这项工作?

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

关于c - 制作arduino备用功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32597021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com