我试图将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。
我该如何解决这个问题? 谢谢
答案 0 :(得分:0)
我从另一篇文章中找到了答案。
问题是超载。 screenState_keyHandler
也是Keypad_apiClass
中的成员函数。解决方案是从类中完全排除screenState_keyHandler
,并使其成为自由函数,或者第二个选项:使用namespace
而不是class
。
感谢@CoryKramer的帮助。 See here