Я пытаюсь связать клавиатуру 4×4 с дисплеем TFT. Я хочу реализовать прослушиватель событий клавиатуры, чтобы при каждом нажатии клавиши соответствующий экран загружался. Слушатель событий будет отслеживать, какой экран загружен в данный момент, и будет прослушивать определенные ключевые входы.
Слушатель событий клавиатуры определен (и будет вызываться в функции setup () в моем основном наброске Arduino (я использую плагин 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 не принимает тип «screenState_keyHandler».
Я придерживаюсь примера наброска с сайта Arduino: Серийная клавиатура события.
Как это исправить?
Спасибо
Я нашел ответ на это из другого поста.
Проблема была в перегрузке. screenState_keyHandler
был также функцией-членом в Keypad_apiClass
, Решение состоит в том, чтобы исключить screenState_keyHandler
из класса, и сделать его свободной функцией, или второй вариант: использовать namespace
вместо class
,
Спасибо @CoryKramer за помощь. Посмотреть здесь