使用arduino键盘编译错误"事件监听器"

时间:2015-07-09 09:15:48

标签: c++ events arduino addeventlistener keypad

我试图将4x4键盘与TFT显示器连接。我想实现一个键盘事件监听器,以便每次按下一个键时都会加载相应的屏幕。事件监听器将跟踪当前加载的屏幕,并将监听特定的键输入。

键盘事件监听器已定义(并将在我的主要arduino sketch中的setup()函数中调用(我使用Atmel Studio + Visual muicro arduino插件。代码用C ++编写):

void Keypad_apiClass::createKeypadEventHandler(void)
{
    keypad44.addEventListener(screenState_keyHandler);
}

" screenState_keyHandler"是事件侦听器函数的名称,定义如下:

void screenState_keyHandler(KeypadEvent keyPressed)
{
   switch(Display_api.screenDisplayID)
   {
      case 0x0A:      //menu screen
      switch(keyPressed)
      {
         case '1':
         //go to sensor readings screen
         break;

         case '2':
         //go to  system settings screen
         break;

         case '#':
         //go to  systemReboot screen
         break;

         default:
         //do nothing
         break;
      }
      break;

      default:
      break;
   }

}

我一直收到这个编译错误:

Compiling 'adutoSecuritySystem' for 'Arduino Mega w/ ATmega2560 (Mega 2560)'
keypad_api.cpp:In member function 'void Keypad_apiClass::createKeypadEventHandler()'
keypad_api.cpp:112:50: error: no matching function for call to 'Keypad::addEventListener(<unresolved overloaded function type>)'
keypad_api.cpp:candidate is
Keypad.h:addEventListener(void (*)(char))
Keypad.h:no known conversion for argument 1 from '<unresolved overloaded function type>' to 'void (*)(char)'
Error compiling

似乎addEventListener不接受&#34; screenState_keyHandler&#34;的类型。 我来自arduino网站的示例草图:Event Serial Keypad

我该如何解决这个问题? 谢谢

1 个答案:

答案 0 :(得分:0)

我从另一篇文章中找到了答案。 问题是超载。 screenState_keyHandler也是Keypad_apiClass中的成员函数。解决方案是从类中完全排除screenState_keyHandler,并使其成为自由函数,或者第二个选项:使用namespace而不是class。 感谢@CoryKramer的帮助。 See here