#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include <driver/gpio.h>
#define BOTAO 15
#define LED 2
int state = 0;
xQueueHandle interputQueue;
static void IRAM_ATTR gpio_interrupt_handler (void *args) {
int pinNumber = (int)args;
xQueueSendFromISR (interputQueue, &pinNumber, NULL);
}
void LED_Control_Task (void *params){
int pinNumber, count = 0;
while (true){
if (xQueueReceive (interputQueue, &pinNumber, portMAX_DELAY)){
printf ("GPIO %d was pressed %d times. The state is %d\n", pinNumber, count++, gpio_get_level (BOTAO));
gpio_set_level (LED, gpio_get_level (BOTAO));
}
}
}
void app_main() {
printf("Hello, Wokwi!\n");
gpio_pad_select_gpio(LED);
gpio_set_direction (LED, GPIO_MODE_OUTPUT);
gpio_pad_select_gpio(BOTAO);
gpio_set_direction (BOTAO, GPIO_MODE_INPUT);
gpio_pulldown_en (BOTAO);
gpio_pullup_dis (BOTAO);
gpio_set_intr_type (BOTAO, GPIO_INTR_POSEDGE);
interputQueue = xQueueCreate (10, sizeof (int));
xTaskCreate (LED_Control_Task, "LED_Control_Task", 2048, NULL, 1, NULL);
gpio_install_isr_service(0);
gpio_isr_handler_add(BOTAO, gpio_interrupt_handler, (void *) BOTAO);
/*
while (true) {
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
*/
}