#include #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/gpio.h" #include "esp_log.h" #include "led_strip.h" #include "sdkconfig.h" static const char *TAG = "example"; /* Use project configuration menu (idf.py menuconfig) to choose the GPIO to blink, or you can edit the following line and set a number here. */ #define BLINK_GPIO CONFIG_BLINK_GPIO #define PHOTO_SENSOR_PIN GPIO_NUM_18 static uint8_t s_led_state = 0; #ifdef CONFIG_BLINK_LED_RMT static led_strip_t *pStrip_a; static void blink_led(void) { /* If the addressable LED is enabled */ if (s_led_state) { /* Set the LED pixel using RGB from 0 (0%) to 255 (100%) for each color */ pStrip_a->set_pixel(pStrip_a, 0, 16, 16, 16); /* Refresh the strip to send data */ pStrip_a->refresh(pStrip_a, 100); } else { /* Set all LED off to clear all pixels */ pStrip_a->clear(pStrip_a, 50); } } static void configure_led(void) { ESP_LOGI(TAG, "Example configured to blink addressable LED!"); /* LED strip initialization with the GPIO and pixels number*/ pStrip_a = led_strip_init(CONFIG_BLINK_LED_RMT_CHANNEL, BLINK_GPIO, 1); /* Set all LED off to clear all pixels */ pStrip_a->clear(pStrip_a, 50); } #elif CONFIG_BLINK_LED_GPIO /*static void blink_led(void) { // Set the GPIO level according to the state (LOW or HIGH) gpio_set_level(BLINK_GPIO, s_led_state); }*/ static void configure_led(void) { ESP_LOGI(TAG, "Example configured to blink GPIO LED!"); gpio_reset_pin(BLINK_GPIO); /* Set the GPIO as a push/pull output */ gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); } #endif // Interrupt service routine (ISR) static void IRAM_ATTR photo_sensor_isr_handler(void *arg) { int level = gpio_get_level(PHOTO_SENSOR_PIN); ESP_EARLY_LOGI("PHOTO", "Triggered! State: %d", level); if( level == 0 ) { gpio_set_level(BLINK_GPIO, 0); } else { gpio_set_level(BLINK_GPIO, 1); } } // GPIO setup void setup_photo_sensor_interrupt() { gpio_config_t io_conf = { .intr_type = GPIO_INTR_ANYEDGE, // Trigger on both rising & falling edges .pin_bit_mask = (1ULL << PHOTO_SENSOR_PIN), .mode = GPIO_MODE_INPUT, .pull_up_en = GPIO_PULLUP_DISABLE, .pull_down_en = GPIO_PULLDOWN_DISABLE }; gpio_config(&io_conf); // Install GPIO ISR service gpio_install_isr_service(0); gpio_isr_handler_add(PHOTO_SENSOR_PIN, photo_sensor_isr_handler, NULL); ESP_LOGI("PHOTO", "Photomicrosensor interrupt configured on GPIO %d", PHOTO_SENSOR_PIN); } void app_main(void) { /* Configure the peripheral according to the LED type */ configure_led(); setup_photo_sensor_interrupt(); while (1) { /*ESP_LOGI(TAG, "Turning the LED %s!", s_led_state == true ? "ON" : "OFF"); blink_led(); // Toggle the LED state s_led_state = !s_led_state;*/ vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS); } }