|
@@ -1,11 +1,3 @@
|
|
|
-/* Blink Example
|
|
|
-
|
|
|
- This example code is in the Public Domain (or CC0 licensed, at your option.)
|
|
|
-
|
|
|
- Unless required by applicable law or agreed to in writing, this
|
|
|
- software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
|
- CONDITIONS OF ANY KIND, either express or implied.
|
|
|
-*/
|
|
|
#include <stdio.h>
|
|
|
#include "freertos/FreeRTOS.h"
|
|
|
#include "freertos/task.h"
|
|
@@ -20,6 +12,7 @@ static const char *TAG = "example";
|
|
|
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;
|
|
|
|
|
@@ -51,11 +44,11 @@ static void configure_led(void)
|
|
|
|
|
|
#elif CONFIG_BLINK_LED_GPIO
|
|
|
|
|
|
-static void blink_led(void)
|
|
|
+/*static void blink_led(void)
|
|
|
{
|
|
|
- /* Set the GPIO level according to the state (LOW or HIGH)*/
|
|
|
+ // Set the GPIO level according to the state (LOW or HIGH)
|
|
|
gpio_set_level(BLINK_GPIO, s_led_state);
|
|
|
-}
|
|
|
+}*/
|
|
|
|
|
|
static void configure_led(void)
|
|
|
{
|
|
@@ -67,17 +60,48 @@ static void configure_led(void)
|
|
|
|
|
|
#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");
|
|
|
+ /*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;
|
|
|
+ // Toggle the LED state
|
|
|
+ s_led_state = !s_led_state;*/
|
|
|
vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS);
|
|
|
}
|
|
|
}
|