ESP32 gpio_get_level() fonksiyonu hatası

Çözüldü156 görüntülenmeEspressifespressif

ESP32 gpio_get_level() fonksiyonu hatası

Merhaba, ESP32-DevKitC v4 kullanarak bir button interrupt projesi yapmaya çalışıyorum. LED pininin anlık seviyesini öğrenmek için gpio_get_level() fonksiyonunu kullanıyorum fakat bu fonksiyon ne olursa olsun 0 olarak dönüş yapıyor. Pin yüksek seviyede ve LED yanarken bile 0 dönüşünü yapıyor. Bu sorunu nasıl çözebilirim ?

#include <stdio.h>
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#define BLINK_GPIO 16
#define BTN_GPIO 17
#define ESP_INTR_FLAG_DEFAULT 0
 
TaskHandle_t ISR = NULL;
static const char* TAG = "Example";
void IRAM_ATTR button_isr_handler(void* arg) {
    xTaskResumeFromISR(ISR);
}

void button_task(void *arg) {
    while(1) {
        gpio_intr_enable(BTN_GPIO);
        vTaskSuspend(NULL);
        ESP_LOGI(TAG,"Button Pressed, Turning LED %s ", 
            !gpio_get_level(BLINK_GPIO) ? "ON" : "OFF");
        gpio_set_level(BLINK_GPIO, !gpio_get_level(BLINK_GPIO));
             }
}

void app_main() {
    gpio_pad_select_gpio(BTN_GPIO);
    gpio_pad_select_gpio(BLINK_GPIO);
    gpio_set_direction(BTN_GPIO, GPIO_MODE_INPUT);
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
    gpio_pulldown_en(BTN_GPIO);
    gpio_set_intr_type(BTN_GPIO, GPIO_INTR_POSEDGE);
    gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT);
    gpio_isr_handler_add(BTN_GPIO, button_isr_handler, NULL);
    xTaskCreate(button_task, "button_task", 4096, NULL , 10, &ISR);
 }

Yusuf Can Yıldız En iyi cevap olarak seçildi Haziran 1, 2022
0

Merhaba, ESP-IDF’in API referansında bahsettiğiniz fonksiyonun altındaki uyarıya dikkat ederseniz, pin konfigürasyonunun giriş olmadığı durumlarda dönüş değerinin her zaman 0 olacağından bahsediliyor. LED pinini “giriş ve çıkış” moduna alarak hatayı düzeltebilirsiniz.

gpio_set_direction(LED_GPIO, GPIO_MODE_INPUT_OUTPUT);

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/gpio.html#_CPPv414gpio_get_level10gpio_num_t

Yusuf Can Yıldız En iyi cevap olarak seçildi Haziran 1, 2022
1
1 cevaptan 1'ini inceliyorsun, tüm cevapları görmek için buraya tıklayın.