Ошибка компиляции с клавиатуры Arduino & quot; Прослушиватель событий & quot;

Я пытаюсь связать клавиатуру 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: Серийная клавиатура события.

Как это исправить?
Спасибо

2

Решение

Я нашел ответ на это из другого поста.
Проблема была в перегрузке. screenState_keyHandler был также функцией-членом в Keypad_apiClass, Решение состоит в том, чтобы исключить screenState_keyHandler из класса, и сделать его свободной функцией, или второй вариант: использовать namespace вместо class,
Спасибо @CoryKramer за помощь. Посмотреть здесь

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector