На этот раз делаю класс для контроллов… и в них используется энкодер, нуждающийся в прерываниях. Вот так работает:
int16_t encoderValue;
class cControlls {
public:
void define () {
pinMode(ENCODER_B, INPUT);
pinMode(ENCODER_A, INPUT);
attachInterrupt(digitalPinToInterrupt(ENCODER_A), encoderItterupt, CHANGE);
}
int16_t get_enc () {
int16_t value = encoderValue;
encoderValue = 0;
return value;
}
private:
static void encoderItterupt () {
if (digitalRead(ENCODER_A)) encoderValue += digitalRead(ENCODER_B) ? -1 : 1;
}
static const uint8_t
ENCODER_A = 7,
ENCODER_B = 6;
};
мне уснуть мешает объявление encoderValue вне класса, можно как-то ее туда упихать? Допустимо одну на все экземпляры класса, если иное невозможно.
Не совсем понял кстати юмора: static const ENCODER_A, ENCODER_B мы значит видим в static void encoderItterupt, но encoderValue как только не объявлял, не крутил и не слюнявил - компилятор не принимает