Arduino调用方法在方法指针数组中定义

时间:2014-05-21 19:42:37

标签: arrays function arduino

我想以某种方式从我的串行监视器调用带有可选参数的函数,然后从我的Arduino程序中调用传入的函数。

根据我的研究,我得出结论,我应该使用数字而不是单词与Arduino交谈,然后通过传入的索引值在数组中调用我的函数。

使用此参考:http://forums.trossenrobotics.com/tutorials/how-to-diy-128/complete-control-of-an-arduino-via-serial-3300/

我如何修改以下内容,以便通过传入的索引值调用函数指针数组中定义的方法?

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

1 个答案:

答案 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])!如果要调用数组中的第三个函数并将其传递给7298,只需调用callFunction(2, 72, 98)