This commit is contained in:
Siwat Sirichai 2023-09-23 10:31:19 +07:00
parent b011033330
commit 6c44c742e8
114 changed files with 17837 additions and 4209 deletions

View file

@ -23,6 +23,7 @@
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
/* USER CODE END Includes */
@ -33,7 +34,19 @@
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#define DOOR_SENSOR_BANK GPIOA
#define DOOR_SENSOR_PIN GPIO_PIN_7
#define DOOR_LOCK_BANK GPIOA
#define DOOR_LOCK_PIN GPIO_PIN_9
#define ALARM_BANK GPIOC
#define ALARM_PIN GPIO_PIN_0
#define DOOR_STATE_OPEN 0
#define DOOR_STATE_CLOSED 1
#define DOOR_LOCK_LOCKED 1
#define DOOR_LOCK_UNLOCKED 0
#define DOOR_ERROR_ALARM_DELAY 10000 //ms
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
@ -55,6 +68,14 @@ const osThreadAttr_t doorHandler_attributes = { .name = "doorHandler",
/* USER CODE BEGIN PV */
uint8_t uart_buffer[10];
uint8_t uart_index = 0;
uint32_t door_lock_command_time = 0;
bool door_state = false;
bool door_lock_state = false;
bool door_lock_state_command = false;
bool door_lock_waiting = false;
bool alarm_active = false;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
@ -147,27 +168,6 @@ int main(void) {
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1) {
if (HAL_UART_Receive(&huart2, uart_buffer + uart_index, 1, 250)
== HAL_OK) {
uart_index++;
if (uart_buffer[uart_index - 1] == 0xFF) {
if (uart_index > 1) {
if (uart_buffer[0] == 0x00) {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, uart_buffer[1]);
} else if (uart_buffer[0] == 0x01) {
uint8_t payload[3] = { 0x01, HAL_GPIO_ReadPin(GPIOA,
GPIO_PIN_7), 0xFF };
HAL_UART_Transmit(&huart2, payload, 3, 1500);
} else if (uart_buffer[0] == 0x02) {
//HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_9);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, uart_buffer[1]);
}
}
uart_index = 0;
memset(uart_buffer, 0, 10);
}
}
}
/* USER CODE END WHILE */
@ -317,21 +317,25 @@ void StartMainTask(void *argument) {
uart_index++;
if (uart_buffer[uart_index - 1] == 0xFF) {
if (uart_index > 1) {
//Command Internal LED
if (uart_buffer[0] == 0x00) {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, uart_buffer[1]);
} else if (uart_buffer[0] == 0x01) {
uint8_t payload[3] = { 0x01, HAL_GPIO_ReadPin(GPIOA,
GPIO_PIN_7), 0xFF };
}
// Get Current Door State
else if (uart_buffer[0] == 0x01) {
uint8_t payload[3] = { 0x01, door_state, 0xFF };
HAL_UART_Transmit(&huart2, payload, 3, 1500);
} else if (uart_buffer[0] == 0x02) {
//HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_9);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, uart_buffer[1]);
}
//
else if (uart_buffer[0] == 0x02) {
door_lock_state_command = uart_buffer[1];
}
}
uart_index = 0;
memset(uart_buffer, 0, 10);
}
}
vTaskDelay(1);
}
/* USER CODE END 5 */
}
@ -347,7 +351,38 @@ void startDoorHandleTask(void *argument) {
/* USER CODE BEGIN startDoorHandleTask */
/* Infinite loop */
for (;;) {
osDelay(1);
door_state = HAL_GPIO_ReadPin(DOOR_SENSOR_BANK, DOOR_SENSOR_PIN);
if (door_lock_state != door_lock_state_command) {
if (door_lock_state_command == DOOR_LOCK_LOCKED) {
if (door_state == DOOR_STATE_CLOSED) {
HAL_GPIO_WritePin(DOOR_LOCK_PIN, DOOR_LOCK_BANK, 1);
door_lock_state = DOOR_LOCK_LOCKED;
} else {
if (!door_lock_waiting) {
door_lock_command_time = HAL_GetTick();
door_lock_waiting = true;
} else {
if (door_state == DOOR_STATE_OPEN) {
if (HAL_GetTick()
- door_lock_command_time>DOOR_ERROR_ALARM_DELAY) {
alarm_active = true;
HAL_GPIO_WritePin(ALARM_BANK, ALARM_PIN, 1);
}
} else {
HAL_GPIO_WritePin(DOOR_LOCK_PIN, DOOR_LOCK_BANK, 1);
door_lock_state = DOOR_LOCK_LOCKED;
}
}
}
} else if (door_lock_state_command == DOOR_LOCK_UNLOCKED) {
HAL_GPIO_WritePin(DOOR_LOCK_PIN, DOOR_LOCK_BANK, 0);
door_lock_state = DOOR_LOCK_UNLOCKED;
}
}
//HAL_GPIO_WritePin(DOOR_LOCK_PIN, DOOR_LOCK_BANK, uart_buffer[1]);
vTaskDelay(100);
}
/* USER CODE END startDoorHandleTask */
}