我想以某种方式从我的串行监视器调用带有可选参数的函数,然后从我的Arduino程序中调用传入的函数。
根据我的研究,我得出结论,我应该使用数字而不是单词与Arduino交谈,然后通过传入的索引值在数组中调用我的函数。
我如何修改以下内容,以便通过传入的索引值调用函数指针数组中定义的方法?
unsigned long serialdata;
int inbyte;
void setup()
{
Serial.begin(9600);
}
void loop()
{
getSerial();
}
long getSerial()
{
serialdata = 0;
while (inbyte != '/')
{
inbyte = Serial.read();
if (inbyte > 0 && inbyte != '/')
{
serialdata = serialdata * 10 + inbyte - '0';
Serial.println(serialdata);
}
}
return serialdata;
inbyte = 0;
}
答案 0 :(得分:1)
以下是一个示例程序:
void (*functionPtrs[5])(uint32_t c, uint8_t wait); //the array of function pointers
void setup() {
functionPtrs[0] = function0; //initializes the array
functionPtrs[1] = function1;
functionPtrs[2] = function2;
functionPtrs[3] = function3;
functionPtrs[4] = function4;
}
void loop() {
// put your main code here, to run repeatedly:
}
void callFunction(int index, uint32_t c, uint8_t wait) {
(*functionPtrs[index])(c, wait); //calls the function at the index of `index` in the array
}
void function0(uint32_t c, uint8_t wait) {}
void function1(uint32_t c, uint8_t wait) {}
void function2(uint32_t c, uint8_t wait) {}
void function3(uint32_t c, uint8_t wait) {}
void function4(uint32_t c, uint8_t wait) {}
要使用此功能,请先使用您的代码填充function0(uint32_t c, uint8_t wait) {}
至function4(uint32_t c, uint8_t wait) {}
。如果您想添加更多功能,只需创建功能(例如void thisIsAFunction(uint32_t c, uint8_t wait) { Serial.println("Hallo!") }
)并添加functionPtrs[5] = thisIsAFunction;
即可。不要忘记将第一行中的[5]
更改为数组的新长度(在本例中为[6]
)!如果要调用数组中的第三个函数并将其传递给72
和98
,只需调用callFunction(2, 72, 98)
。