我试图接口与TFT显示屏的4×4键盘。 我想实现一个键盘事件侦听器,使得相应的屏幕将每一个键被按下时加载。 事件监听器会跟踪其屏幕是当前加载的,并会被监听特定键输入。
键盘事件监听器被定义(并会在设置()函数在我的主Arduino的草图被称为(我使用爱特梅尔工作室+视觉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;
}
}
当我看函数的原型addEventListener
(在声明它的头文件,我看到这一点:
void addEventListener(void (*listener)(char));
我无法理解原型的参数。 难道是期待一个函数指针还是什么? 可能有人请解释一下上面原型的参数?
当我编译,我得到
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
这就是为什么我很困惑! 该函数存在唯一的其他地方是在类的成员声明:
class Keypad_apiClass
{
protected:
public:
void init();
char retrieveKeyPressed(void);
char waitAndRetrieveKeyPressed(void);
uint8_t returnKeyPressed_IntVersion(char keyPressed);
void createKeypadventHandler(void);
void screenState_keyHandler(KeypadEvent keyPressed);
};