#include "counter.h" uint8_t Counter::amountOfCounter = 0; Counter::Counter(uint8_t pin) : pulsePin{pin}, unit{static_cast(Counter::amountOfCounter)} { if (Counter::amountOfCounter <= Counter::maxCounter) { Counter::amountOfCounter++; } pcnt_config_t config; config.unit = this->unit; config.channel = PCNT_CHANNEL_0; config.counter_h_lim = Counter::highLimit; config.counter_l_lim = Counter::lowLimit; config.ctrl_gpio_num = PCNT_PIN_NOT_USED; config.hctrl_mode = PCNT_CHANNEL_LEVEL_ACTION_KEEP; config.lctrl_mode = PCNT_CHANNEL_LEVEL_ACTION_KEEP; config.pulse_gpio_num = this->pulsePin; config.pos_mode = PCNT_CHANNEL_EDGE_ACTION_INCREASE; config.neg_mode = PCNT_CHANNEL_EDGE_ACTION_HOLD; pcnt_unit_config(&config); } void Counter::pause() { pcnt_counter_pause(this->unit); } void Counter::resume() { pcnt_counter_resume(this->unit); } void Counter::clear() { pcnt_counter_clear(this->unit); } int16_t Counter::getValue() const { int16_t res = 0; pcnt_get_counter_value(this->unit, &res); return res; } void Counter::setFilterValue(uint16_t value) { pcnt_set_filter_value(this->unit, value); this->filterEnable(); } void Counter::filterEnable() { pcnt_filter_enable(this->unit); } void Counter::filterDisable() { pcnt_filter_disable(this->unit); }