it takes pictures, it uses timers, its great
This commit is contained in:
		
							parent
							
								
									8bc2fbc65e
								
							
						
					
					
						commit
						996a8b687f
					
				
					 1 changed files with 72 additions and 3 deletions
				
			
		
							
								
								
									
										75
									
								
								main/main.c
									
										
									
									
									
								
							
							
						
						
									
										75
									
								
								main/main.c
									
										
									
									
									
								
							|  | @ -11,8 +11,8 @@ | ||||||
| #include <math.h> | #include <math.h> | ||||||
| #include "freertos/FreeRTOS.h" | #include "freertos/FreeRTOS.h" | ||||||
| #include "freertos/task.h" | #include "freertos/task.h" | ||||||
|  | #include "freertos/timers.h" | ||||||
| #include "freertos/event_groups.h" | #include "freertos/event_groups.h" | ||||||
| #include "driver/spi_master.h" |  | ||||||
| #include "esp_system.h" | #include "esp_system.h" | ||||||
| #include "esp_log.h" | #include "esp_log.h" | ||||||
| #include "esp_console.h" | #include "esp_console.h" | ||||||
|  | @ -25,20 +25,28 @@ | ||||||
| #include "soc/mcpwm_struct.h" | #include "soc/mcpwm_struct.h" | ||||||
| #include "linenoise/linenoise.h" | #include "linenoise/linenoise.h" | ||||||
| #include "argtable3/argtable3.h" | #include "argtable3/argtable3.h" | ||||||
|  | #include "driver/gpio.h" | ||||||
| 
 | 
 | ||||||
| #include "esp32-wifi-manager.h" | #include "esp32-wifi-manager.h" | ||||||
| 
 | 
 | ||||||
| #define TAG "CACO" | #define TAG "CACO" | ||||||
| 
 | 
 | ||||||
|  | #define GPIO_INPUT_IO_0    33 | ||||||
|  | #define GPIO_INPUT_PIN_SEL  ((1ULL<<GPIO_INPUT_IO_0)) | ||||||
|  | #define ESP_INTR_FLAG_DEFAULT 0 | ||||||
|  | 
 | ||||||
| #define BASE_URL "http://192.168.0.1/"
 | #define BASE_URL "http://192.168.0.1/"
 | ||||||
| #define CMD_BEEP "cmd=audio resplay 0 1 3\n" | #define CMD_BEEP "cmd=audio resplay 0 1 3\n" | ||||||
| 
 | 
 | ||||||
| #define CONFIG_SERVO_ENABLE (0) | #define CONFIG_SERVO_ENABLE (0) | ||||||
| #define CONFIG_SHOOT_DELAY_MS (30000) | #define CONFIG_SHOOT_DELAY_MS (30000) | ||||||
|  | #define CONFIG_TIMEOUT_SHOOT (100 / portTICK_PERIOD_MS) | ||||||
| 
 | 
 | ||||||
| static uint8_t id; | static uint8_t id; | ||||||
| 
 | 
 | ||||||
| EventGroupHandle_t wm_event_group; | static EventGroupHandle_t wm_event_group; | ||||||
|  | static xQueueHandle gpio_evt_queue = NULL; | ||||||
|  | static xTimerHandle button_timer; | ||||||
| 
 | 
 | ||||||
| static struct { | static struct { | ||||||
|   struct arg_int *value; // how fast it will move in uS
 |   struct arg_int *value; // how fast it will move in uS
 | ||||||
|  | @ -145,7 +153,7 @@ void loop() { | ||||||
|   vTaskDelay(1000 / portTICK_PERIOD_MS); |   vTaskDelay(1000 / portTICK_PERIOD_MS); | ||||||
| 
 | 
 | ||||||
|   while(true) { |   while(true) { | ||||||
|     shoot(); |     //shoot();
 | ||||||
| 
 | 
 | ||||||
|     if(CONFIG_SERVO_ENABLE) { |     if(CONFIG_SERVO_ENABLE) { | ||||||
|       vTaskDelay(3000 / portTICK_PERIOD_MS); |       vTaskDelay(3000 / portTICK_PERIOD_MS); | ||||||
|  | @ -270,6 +278,63 @@ static void initialize_console() { | ||||||
|   linenoiseHistorySetMaxLen(100); |   linenoiseHistorySetMaxLen(100); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void IRAM_ATTR gpio_isr_handler(void* arg) | ||||||
|  | { | ||||||
|  |     uint32_t gpio_num = (uint32_t) arg; | ||||||
|  |     xQueueSendFromISR(gpio_evt_queue, &gpio_num, NULL); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void gpio_loop() { | ||||||
|  |   int8_t state = -1; | ||||||
|  |   uint32_t io_num; | ||||||
|  | 
 | ||||||
|  |   for(;;) { | ||||||
|  |     if(xQueueReceive(gpio_evt_queue, &io_num, portMAX_DELAY)) { | ||||||
|  |       uint8_t level = gpio_get_level(io_num); | ||||||
|  |       printf("GPIO[%d] intr, val: %d\n", io_num, level); | ||||||
|  | 
 | ||||||
|  |       // don't act on state level twice
 | ||||||
|  |       if(level == state) continue; | ||||||
|  | 
 | ||||||
|  |       // track level for duplicate
 | ||||||
|  |       state = level; | ||||||
|  | 
 | ||||||
|  |       if(level == 0) { | ||||||
|  |         xTimerChangePeriod(button_timer, CONFIG_TIMEOUT_SHOOT, portMAX_DELAY); | ||||||
|  |         xTimerStart(button_timer, portMAX_DELAY); | ||||||
|  |       } else { | ||||||
|  |         xTimerStop(button_timer, portMAX_DELAY); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void handle_button_timer() { | ||||||
|  |   shoot(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void gpio_init() { | ||||||
|  |   gpio_config_t io_conf; | ||||||
|  | 
 | ||||||
|  |   io_conf.intr_type = GPIO_PIN_INTR_ANYEDGE; | ||||||
|  |   io_conf.mode = GPIO_MODE_INPUT; | ||||||
|  |   io_conf.pin_bit_mask = GPIO_INPUT_PIN_SEL; | ||||||
|  |   io_conf.pull_down_en = 0; | ||||||
|  |   io_conf.pull_up_en = 1; | ||||||
|  |   gpio_config(&io_conf); | ||||||
|  | 
 | ||||||
|  |   gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT); | ||||||
|  |   gpio_isr_handler_add(GPIO_INPUT_IO_0, gpio_isr_handler, (void*) GPIO_INPUT_IO_0); | ||||||
|  | 
 | ||||||
|  |   //create a queue to handle gpio event from isr
 | ||||||
|  |   gpio_evt_queue = xQueueCreate(10, sizeof(uint32_t)); | ||||||
|  |   //start gpio task
 | ||||||
|  | 
 | ||||||
|  |   button_timer = xTimerCreate("gpio_timer", 1000, pdFALSE, (void*)NULL, handle_button_timer); | ||||||
|  | 
 | ||||||
|  |   xTaskCreate(gpio_loop, "gpio_loop", 2048, NULL, 10, NULL); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void app_main() { | void app_main() { | ||||||
|   esp_err_t ret; |   esp_err_t ret; | ||||||
| 
 | 
 | ||||||
|  | @ -300,6 +365,8 @@ void app_main() { | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   wifi_manager_scan(); | ||||||
|  | 
 | ||||||
|   //initialize_console();
 |   //initialize_console();
 | ||||||
|   //esp_console_register_help_command();
 |   //esp_console_register_help_command();
 | ||||||
|   //register_servo_cmd();
 |   //register_servo_cmd();
 | ||||||
|  | @ -310,6 +377,8 @@ void app_main() { | ||||||
| 
 | 
 | ||||||
|   const char* prompt = LOG_COLOR_I "grii> " LOG_RESET_COLOR; |   const char* prompt = LOG_COLOR_I "grii> " LOG_RESET_COLOR; | ||||||
| 
 | 
 | ||||||
|  |   gpio_init(); | ||||||
|  | 
 | ||||||
|   return; |   return; | ||||||
|   while(true) { |   while(true) { | ||||||
|     char* line = linenoise(prompt); |     char* line = linenoise(prompt); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue