#include "../include/SwitchableEncodeur.h" IRAM_ATTR void switchEncoder() { SwitchableEncodeur::getInstance()->addMenu(); } SwitchableEncodeur* SwitchableEncodeur::instance = nullptr; SwitchableEncodeur::SwitchableEncodeur(uint8_t pin1, uint8_t pin2, uint8_t pinSW, int nbMenu): Encoder(pin1, pin2){ SwitchableEncodeur::instance = this; this->menu = 0; this->nbMenu = nbMenu; pinMode(pinSW, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(pinSW), switchEncoder, RISING);//FIXME: maybe change to FALLING this->oldPosition = -999; this->oldMenu = -999; } void SwitchableEncodeur::resetMenu() { this->menu = 0; } void SwitchableEncodeur::addMenu() { this->menu++; if (this->menu > this->nbMenu) { this->menu = 0; } } int SwitchableEncodeur::getMenu() { return this->menu; } SwitchableEncodeur* SwitchableEncodeur::getInstance() { return SwitchableEncodeur::instance; } bool SwitchableEncodeur::update() { bool sortie = false; long newPosition = this->read()/4; if (newPosition != this->oldPosition || this->menu != this->oldMenu) { this->oldMenu = this->menu; this->oldPosition = newPosition; sortie = true; } return sortie; } int SwitchableEncodeur::getValue() { return this->oldPosition; } void SwitchableEncodeur::resetValue() { this->oldPosition = 0; }