ESP32 gpio_get_level() fonksiyonu hatası
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
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);
Yusuf Can Yıldız En iyi cevap olarak seçildi Haziran 1, 2022