64 lines
1.4 KiB
C++
64 lines
1.4 KiB
C++
#include "counter.h"
|
|
|
|
uint8_t Counter::amountOfCounter = 0;
|
|
|
|
Counter::Counter(uint8_t pin)
|
|
: pulsePin{pin}, unit{static_cast<pcnt_unit_t>(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);
|
|
}
|