From bbe0faf31defedb5f6bb406a0bbc192843df3304 Mon Sep 17 00:00:00 2001 From: Mysteo91 Date: Mon, 31 Jul 2023 15:57:16 +0300 Subject: [PATCH] ---vl6180dr --- App/app.cpp | 74 +++++++++++++++++++++++++++---- main_prog/Core/Src/gpio.c | 2 +- main_prog/Core/Src/main.cpp | 32 +++++++------ main_prog/vl6180/App/vl6180_app.c | 26 ++++++++--- main_prog/vl6180/App/vl6180_app.h | 4 ++ 5 files changed, 111 insertions(+), 27 deletions(-) diff --git a/App/app.cpp b/App/app.cpp index 52d10a3..cba2f0f 100644 --- a/App/app.cpp +++ b/App/app.cpp @@ -96,9 +96,61 @@ void lightingOff (void) { HAL_GPIO_WritePin(LIGHTING_EN_GPIO_Port, LIGHTING_EN_Pin, GPIO_PIN_RESET); } + +uint8_t proximityCompleteMessure = 0; +void proximityMessureCompleted (void) +{ + proximityCompleteMessure = 1; +} + + +VL6180_RangeData_t VL6180_Range; +uint32_t waitAnsweredMs = 0; +#define MAX_WAIT_ANSWER_FROM_GM60 10000 +#define DATA_TIMEOUT 500 + +uint32_t lightStartMs = 0; + + +uint8_t uartTask (void) // return 0 if data received , otherwise return 1 +{ + if (waitAnsweredMs != 0) + { + if (HAL_GetTick() - waitAnsweredMs >= MAX_WAIT_ANSWER_FROM_GM60 ) + { + HAL_GPIO_WritePin(READER_EN_GPIO_Port, READER_EN_Pin, GPIO_PIN_SET ); + HAL_Delay(500); + HAL_GPIO_WritePin(READER_EN_GPIO_Port, READER_EN_Pin, GPIO_PIN_RESET ); + waitAnsweredMs = 0; + } + } + + if (!bridge.uart1Buf->is_empty() && (__HAL_UART_GET_FLAG(bridge.getHuart2(), UART_FLAG_TC))) { + waitAnsweredMs = HAL_GetTick(); + temp[1] = bridge.uart1Buf->dequeue(); + HAL_UART_Transmit_IT(bridge.getHuart2(), &temp[1], 1); + return 0; + } + + if (!bridge.uart2Buf->is_empty() && (__HAL_UART_GET_FLAG(bridge.getHuart1(), UART_FLAG_TC))) { + temp[2] = bridge.uart2Buf->dequeue(); + HAL_UART_Transmit_IT(bridge.getHuart1(), &temp[2], 1); + return 0; + } + +} void AppTask(void) { if (!updateMode) { + if (uartTask() == 0) + { + + } + if (HAL_GetTick() - lightStartMs >= 10000) + { + lightStartMs = 0; + lightingOff(); + } if (HAL_GPIO_ReadPin(CONTROL_PIN_GPIO_Port, CONTROL_PIN_Pin) == GPIO_PIN_SET) { if (controlPinFlag == 0) { @@ -122,14 +174,20 @@ void AppTask(void) //////ZUMMER OFF } } - if (!bridge.uart1Buf->is_empty() && (__HAL_UART_GET_FLAG(bridge.getHuart2(), UART_FLAG_TC))) { - temp[1] = bridge.uart1Buf->dequeue(); - HAL_UART_Transmit_IT(bridge.getHuart2(), &temp[1], 1); - } - - if (!bridge.uart2Buf->is_empty() && (__HAL_UART_GET_FLAG(bridge.getHuart1(), UART_FLAG_TC))) { - temp[2] = bridge.uart2Buf->dequeue(); - HAL_UART_Transmit_IT(bridge.getHuart1(), &temp[2], 1); + if (bridge.uart1Buf->is_empty() && bridge.uart2Buf->is_empty()) + { + if (proximityCompleteMessure == 1) + { + proximityCompleteMessure = 0; + if (getRange(&VL6180_Range) == 0) + { + if (VL6180_Range.range_mm > 0 && lightStartMs == 0) + { + lightStartMs = uwTick; + lightingOn(); + } + } + } } } else diff --git a/main_prog/Core/Src/gpio.c b/main_prog/Core/Src/gpio.c index 2d477df..1dad105 100644 --- a/main_prog/Core/Src/gpio.c +++ b/main_prog/Core/Src/gpio.c @@ -78,7 +78,7 @@ void MX_GPIO_Init(void) HAL_GPIO_Init(CONTROL_PIN_GPIO_Port, &GPIO_InitStruct); /* EXTI interrupt init*/ - HAL_NVIC_SetPriority(EXTI0_1_IRQn, 0, 0); + HAL_NVIC_SetPriority(EXTI0_1_IRQn, 1, 0); HAL_NVIC_EnableIRQ(EXTI0_1_IRQn); } diff --git a/main_prog/Core/Src/main.cpp b/main_prog/Core/Src/main.cpp index 0f0fa4b..e347418 100644 --- a/main_prog/Core/Src/main.cpp +++ b/main_prog/Core/Src/main.cpp @@ -79,8 +79,7 @@ static void VectorBase_Config(void) { SCB->VTOR = (unsigned long) &g_pfnVectors[0]; } /* USER CODE END 0 */ -uint8_t data3[1024]; -uint8_t data2[1024]; + /** * @brief The application entry point. * @retval int @@ -132,7 +131,8 @@ int main(void) { * @brief System Clock Configuration * @retval None */ -void SystemClock_Config(void) { +void SystemClock_Config(void) +{ RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; @@ -143,28 +143,34 @@ void SystemClock_Config(void) { /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1; - RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV1; + RCC_OscInitStruct.PLL.PLLN = 16; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { Error_Handler(); } /** Initializes the CPU, AHB and APB buses clocks */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK - | RCC_CLOCKTYPE_PCLK1; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) { + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { Error_Handler(); } } + /* USER CODE BEGIN 4 */ /* USER CODE END 4 */ diff --git a/main_prog/vl6180/App/vl6180_app.c b/main_prog/vl6180/App/vl6180_app.c index 104e457..123fc26 100644 --- a/main_prog/vl6180/App/vl6180_app.c +++ b/main_prog/vl6180/App/vl6180_app.c @@ -8,7 +8,7 @@ #include "main.h" #include "i2c.h" -#define max_scale 3 +#define max_scale 1 uint8_t changeScale = 0; #define ALLOW_DISABLE_WAF_FROM_BLUE_BUTTON 1 #define theVL6180Dev 0x52 // what we use as "API device @@ -228,15 +228,31 @@ void RangeState(void) { } } uint32_t resetPressedMs = 0; +uint8_t motionDetected = 0; +__weak void proximityMessureCompleted (void) +{ + +} + +uint8_t getRange (VL6180_RangeData_t* range) +{ + if (Range.errorStatus == 0) + { + *range = Range; + return 0; + } + else + { + range->range_mm = -1; + return 1; + } +} void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == GPIO_PIN_0 && allowIT == 1) { RangeState(); - if (Range.errorStatus == 0) - { - __NOP(); - } + proximityMessureCompleted(); VL6180_ClearAllInterrupt(theVL6180Dev); } else if (GPIO_Pin == GPIO_PIN_1) diff --git a/main_prog/vl6180/App/vl6180_app.h b/main_prog/vl6180/App/vl6180_app.h index 4db3395..37e5a00 100644 --- a/main_prog/vl6180/App/vl6180_app.h +++ b/main_prog/vl6180/App/vl6180_app.h @@ -2,8 +2,12 @@ // Created by Professional on 7/31/2023. // +#include "vl6180_def.h" + #ifndef MYPROJECT_VL6180_APP_H #define MYPROJECT_VL6180_APP_H #endif //MYPROJECT_VL6180_APP_H void vl6180_init (void); +__weak void proximityMessureCompleted (void); +uint8_t getRange (VL6180_RangeData_t* range); \ No newline at end of file