Files
Bachelorarbeit-Rover/lib/Counter/counter.cpp
T
2023-08-18 15:34:56 +02:00

57 lines
1.4 KiB
C++

#include "counter.h"
#include <inttypes.h>
uint8_t Counter::amountOfCounter = 0;
Counter::Counter(uint8_t pin) {
this->pulsePin = pin;
this->unit = static_cast<pcnt_unit_t>(Counter::amountOfCounter);
if (Counter::amountOfCounter < 7)
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;
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);
}