Я пытаюсь вызвать функцию клавиатуры в моей собственной библиотеке.До этого у меня была ошибка «Недопустимое использование функции-члена нестатической ошибки», и я изменил функцию на статическую.Однако, поскольку функция клавиатуры не является статичной, она все равно не запускается.
Это ошибка.
sketch\latch.cpp: In static member function 'static void latch::keypadEvent(KeypadEvent)':
latch.cpp:18:11: error: invalid use of member 'latch::keypad' in static member function
switch (keypad.getState()){
^
In file included from sketch\latch.cpp:1:0:
sketch\latch.h:20:12: note: declared here
Keypad keypad;
^
exit status 1
invalid use of member 'latch::keypad' in static member function
Мой код
#include "latch.h"
latch doorlatch;
void setup(){
doorlatch.begin(9600);
}
void loop(){
doorlatch.main();
}
h file
#include <Keypad.h>
#ifndef _latch_
#define _latch_
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
class latch {
public:
latch();
void begin(int baudrate);
void main();
static void keypadEvent(KeypadEvent input);
Keypad keypad;
private:
const byte Rows = 4;
const byte Cols = 4;
char keys[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[4] = {7, 6, 5, 4};
byte colPins[4] = { 11, 10, 9, 8 };
};
#endif
cpp file
latch::latch():keypad( makeKeymap(keys), rowPins, colPins, Rows, Cols ) {
}
void latch::begin(int baudrate){
Serial.begin(baudrate);
keypad.addEventListener(keypadEvent);
}
void latch::main(){
keypad.getKey();
}
void latch::keypadEvent(KeypadEvent input){
switch (keypad.getState()){
case PRESSED:
Serial.print("Enter: ");
Serial.println(input);
delay(10);
}
}
Может кто-нибудь помочь мне решить эту проблему?Или я должен использовать другой метод?например, объявив его другом?