Files
2026-11-03 12:17:00 +03:00

72 lines
1.9 KiB
Markdown

# ESP32 ESP-IDF component for inclinometer (via optical rotary encoder)
## Features
1. Quadrature encoder support with configurable GPIO pins.
2. Configurable pull-up resistor enablement for encoder channels.
3. Support for both clockwise and counter-clockwise rotation directions.
4. Configurable pulses per revolution for accurate angle calculation.
5. Position tracking with get and reset operations.
6. PCNT glitch filter for noise rejection (1000ns).
7. Multiple inclinometer instances support.
## Attention
1. The maximum value of encoder_pulses is 8191, limited by the PCNT counter range of +/-32767.
## Using
In an existing project, run the following command to install the component:
```bash
cd ../your_project/components
git clone https://github.com/aZholtikov/zh_inclinometer
```
In the application, add the component:
```c
#include "zh_inclinometer.h"
```
## Examples
### Basic Example
```c
#include "zh_inclinometer.h"
zh_inclinometer_handle_t *inclinometer_handle = NULL;
void app_main(void)
{
esp_log_level_set("zh_inclinometer", ESP_LOG_ERROR);
zh_inclinometer_init_config_t config = ZH_INCLINOMETER_INIT_CONFIG_DEFAULT();
config.a_gpio_number = GPIO_NUM_26;
config.b_gpio_number = GPIO_NUM_27;
config.encoder_pulses = 3600;
esp_err_t ret = zh_inclinometer_init(&config, &inclinometer_handle);
if (ret != ESP_OK)
{
printf("Inclinometer initialization error: %s\n", esp_err_to_name(ret));
return;
}
ret = zh_inclinometer_reset(&inclinometer_handle);
if (ret == ESP_OK)
{
printf("Inclinometer position reset to zero.\n");
}
for (;;)
{
float angle = 0;
ret = zh_inclinometer_get(&inclinometer_handle, &angle);
if (ret == ESP_OK)
{
printf("Inclinometer position is %0.2f degrees.\n", angle);
}
vTaskDelay(100 / portTICK_PERIOD_MS);
}
zh_inclinometer_deinit(&inclinometer_handle);
}
```