#include <stdio.h>
#include <stdint.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
//include "DS3231.h"
//#include "LCD1602.h"
//include "I2C.h"
#include "ENCODER.h"
#define Apin 14
#define Bpin 12
#define KEYpin 13
// Обработка прерываний поворота ручки энкодера
void IRAM_ATTR rot_isr_handler (void *arg) {
if (gpio_get_level(Bpin)) ++curr_rotate;
else --curr_rotate;
}
// Обработка нажатий кнопки энкодера
void IRAM_ATTR btn_isr_handler (void *arg) {
curr_push = !curr_push;
}
void app_main() {
//uint8_t Apin = 14;
printf("Hello, Wokwi!\n");
// ENC pins adjusted
gpio_config_t butt_conf = {
.pin_bit_mask = (1ULL << Apin),
.mode = GPIO_MODE_INPUT,
.pull_up_en = GPIO_PULLUP_DISABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_NEGEDGE
};
gpio_config(&butt_conf);
gpio_config_t butt_conf1 = {
.pin_bit_mask = (1ULL << Bpin),
.mode = GPIO_MODE_INPUT,
.pull_up_en = GPIO_PULLUP_DISABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE
};
gpio_config(&butt_conf1);
gpio_config_t butt_conf2 = {
.pin_bit_mask = (1ULL << KEYpin),
.mode = GPIO_MODE_INPUT,
.pull_up_en = GPIO_PULLUP_ENABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_NEGEDGE
};
gpio_config(&butt_conf2);
//encoder_init();
ESP_ERROR_CHECK(gpio_install_isr_service(0));
ESP_ERROR_CHECK(gpio_isr_handler_add(Apin, rot_isr_handler, NULL));
ESP_ERROR_CHECK(gpio_isr_handler_add(KEYpin, btn_isr_handler, NULL));
//vTaskDelay(pdMS_TO_TICKS(100));
while (true) {
if (prev_rotate < curr_rotate) {
printf("Right rotate: cur_rotate = %d\n", curr_rotate);
prev_rotate = curr_rotate;
}
if (prev_rotate > curr_rotate) {
printf("Left rotate: cur_rotate = %d\n", curr_rotate);
prev_rotate = curr_rotate;
}
if (curr_push != prev_push) {
printf("Push\n");
curr_push = prev_push;
//printf("Curr_push = %d\n", curr_push);
}
//printf("Curr_push = %d\n", curr_push);
vTaskDelay(30 / portTICK_PERIOD_MS);
}
}