refactor(Code Cleanup): Modified code structure

This commit is contained in:
Devoalda 2023-11-24 09:39:23 +08:00
parent b541cc620f
commit ff9b93fda5
5 changed files with 78 additions and 59 deletions

View File

@ -3,10 +3,10 @@
/* ADC Configuration */ /* ADC Configuration */
#define LINE_SENSOR_READ_DELAY ( 100 ) #define LINE_SENSOR_READ_DELAY (100)
#define LEFT_SENSOR_PIN ( 26 ) #define LEFT_SENSOR_PIN (26)
#define RIGHT_SENSOR_PIN ( 27 ) #define RIGHT_SENSOR_PIN (27)
#define BARCODE_SENSOR_PIN ( 22 ) #define BARCODE_SENSOR_PIN (22)
#endif //CONFIG_H #endif // CONFIG_H

View File

@ -2,7 +2,6 @@
#include "line_sensor_init.h" #include "line_sensor_init.h"
#include "car_config.h" #include "car_config.h"
int int
main(void) main(void)
{ {
@ -10,7 +9,7 @@ main(void)
obs_t obs; obs_t obs;
car_struct_t car_struct = {.obs = &obs}; car_struct_t car_struct = { .obs = &obs };
sleep_ms(2000); sleep_ms(2000);

View File

@ -80,7 +80,8 @@ calculate_yaw_magnetometer(int16_t magnetometer[3])
* @return Compensated Yaw * @return Compensated Yaw
*/ */
float float
compensate_magnetometer(float yaw_mag, int16_t temperature) { compensate_magnetometer(float yaw_mag, int16_t temperature)
{
// Calculate temperature difference from the reference temperature // Calculate temperature difference from the reference temperature
uint delta_temp = temperature - TEMPERATURE_OFFSET; uint delta_temp = temperature - TEMPERATURE_OFFSET;
@ -190,11 +191,11 @@ calculate_compass_direction(float yaw)
* @param compass_direction Compass Direction * @param compass_direction Compass Direction
*/ */
static inline void static inline void
update_orientation_data(float roll, update_orientation_data(float roll,
float pitch, float pitch,
float yaw, float yaw,
compass_direction_t compass_direction, compass_direction_t compass_direction,
volatile direction_t *g_direction) volatile direction_t *g_direction)
{ {
g_direction->roll = roll; g_direction->roll = roll;
g_direction->roll_angle = (roll > 0) ? LEFT : RIGHT; g_direction->roll_angle = (roll > 0) ? LEFT : RIGHT;
@ -211,8 +212,8 @@ update_orientation_data(float roll,
* @param magnetometer Magnetometer Data * @param magnetometer Magnetometer Data
*/ */
static void static void
read_direction(int16_t acceleration[3], read_direction(int16_t acceleration[3],
int16_t magnetometer[3], int16_t magnetometer[3],
volatile direction_t *g_direction) volatile direction_t *g_direction)
{ {
@ -301,7 +302,7 @@ print_roll_and_pitch(angle_t roll_angle, angle_t pitch_angle)
} }
void void
updateDirection(volatile direction_t * g_direction) updateDirection(volatile direction_t *g_direction)
{ {
int16_t magnetometer[3]; int16_t magnetometer[3];
int16_t accelerometer[3]; int16_t accelerometer[3];
@ -323,7 +324,7 @@ void
monitor_direction_task(void *pvParameters) monitor_direction_task(void *pvParameters)
{ {
volatile direction_t *p_direction = NULL; volatile direction_t *p_direction = NULL;
p_direction = (direction_t *) pvParameters; p_direction = (direction_t *)pvParameters;
for (;;) for (;;)
{ {
@ -339,7 +340,7 @@ magnetometer_tasks_init(car_struct_t *car_struct)
xTaskCreate(monitor_direction_task, xTaskCreate(monitor_direction_task,
"Direction Task", "Direction Task",
configMINIMAL_STACK_SIZE, configMINIMAL_STACK_SIZE,
(void *) car_struct->p_direction, (void *)car_struct->p_direction,
PRIO, PRIO,
&h_direction_task); &h_direction_task);
} }

View File

@ -3,7 +3,7 @@
#include "magnetometer_direction.h" #include "magnetometer_direction.h"
#include "map.h" #include "map.h"
#define DIRECTION_TASK_PRIORITY (tskIDLE_PRIORITY + 1UL) #define DIRECTION_TASK_PRIORITY (tskIDLE_PRIORITY + 1UL)
void void
launch() launch()
@ -21,16 +21,16 @@ launch()
} }
int int
main (void) main(void)
{ {
stdio_usb_init(); stdio_usb_init();
direction_t direction; direction_t direction;
car_struct_t car_struct = {.p_direction = &direction}; car_struct_t car_struct = { .p_direction = &direction };
int grid_rows = 10; // Define the number of rows in your grid int grid_rows = 10; // Define the number of rows in your grid
int grid_cols = 10; // Define the number of columns in your grid int grid_cols = 10; // Define the number of columns in your grid
car_path_grid = create_grid(grid_rows, grid_cols); car_path_grid = create_grid(grid_rows, grid_cols);
@ -39,13 +39,13 @@ main (void)
magnetometer_init(&car_struct); magnetometer_init(&car_struct);
// printf("Magnetometer initialized!\n"); // printf("Magnetometer initialized!\n");
magnetometer_tasks_init(&car_struct); magnetometer_tasks_init(&car_struct);
vTaskStartScheduler(); vTaskStartScheduler();
// launch(); // launch();
return(0); return (0);
} }

View File

@ -9,29 +9,33 @@
#ifndef TEST_PROJECT_MAP_H #ifndef TEST_PROJECT_MAP_H
#define TEST_PROJECT_MAP_H #define TEST_PROJECT_MAP_H
// Define the grid structure // Define the grid structure
typedef struct { typedef struct
bool **data; // 2D array to represent the grid {
int rows; // Number of rows in the grid bool **data; // 2D array to represent the grid
int cols; // Number of columns in the grid int rows; // Number of rows in the grid
int cols; // Number of columns in the grid
} Grid; } Grid;
// Global grid to track the car's path // Global grid to track the car's path
Grid *car_path_grid; Grid *car_path_grid;
// Function to create and initialize a grid // Function to create and initialize a grid
Grid *create_grid(int rows, int cols) { Grid *
Grid *grid = (Grid *) malloc(sizeof(Grid)); create_grid(int rows, int cols)
{
Grid *grid = (Grid *)malloc(sizeof(Grid));
grid->rows = rows; grid->rows = rows;
grid->cols = cols; grid->cols = cols;
// Allocate memory for the 2D array // Allocate memory for the 2D array
grid->data = (bool **) malloc(rows * sizeof(bool *)); grid->data = (bool **)malloc(rows * sizeof(bool *));
for (int i = 0; i < rows; i++) { for (int i = 0; i < rows; i++)
grid->data[i] = (bool *) malloc(cols * sizeof(bool)); {
for (int j = 0; j < cols; j++) { grid->data[i] = (bool *)malloc(cols * sizeof(bool));
grid->data[i][j] = false; // Initialize to 'false' (unvisited) for (int j = 0; j < cols; j++)
{
grid->data[i][j] = false; // Initialize to 'false' (unvisited)
} }
} }
@ -39,23 +43,32 @@ Grid *create_grid(int rows, int cols) {
} }
// Function to mark a cell as visited // Function to mark a cell as visited
void mark_cell(Grid *grid, int row, int col) { void
if (row >= 0 && row < grid->rows && col >= 0 && col < grid->cols) { mark_cell(Grid *grid, int row, int col)
{
if (row >= 0 && row < grid->rows && col >= 0 && col < grid->cols)
{
grid->data[row][col] = true; grid->data[row][col] = true;
} }
} }
// Function to check if a cell has been visited // Function to check if a cell has been visited
bool is_cell_visited(Grid *grid, int row, int col) { bool
if (row >= 0 && row < grid->rows && col >= 0 && col < grid->cols) { is_cell_visited(Grid *grid, int row, int col)
{
if (row >= 0 && row < grid->rows && col >= 0 && col < grid->cols)
{
return grid->data[row][col]; return grid->data[row][col];
} }
return false; // Consider out-of-bounds as unvisited return false; // Consider out-of-bounds as unvisited
} }
// Function to destroy the grid and free memory // Function to destroy the grid and free memory
void destroy_grid(Grid *grid) { void
for (int i = 0; i < grid->rows; i++) { destroy_grid(Grid *grid)
{
for (int i = 0; i < grid->rows; i++)
{
free(grid->data[i]); free(grid->data[i]);
} }
free(grid->data); free(grid->data);
@ -64,12 +77,15 @@ void destroy_grid(Grid *grid) {
// Function to update the map based on car's current orientation // Function to update the map based on car's current orientation
// Function to update the map based on car's current orientation and position // Function to update the map based on car's current orientation and position
void update_map(int orientation, int cur_x, int cur_y) { void
update_map(int orientation, int cur_x, int cur_y)
{
// Define offsets for different orientations // Define offsets for different orientations
int offset_x = 0; int offset_x = 0;
int offset_y = 0; int offset_y = 0;
switch (orientation) { switch (orientation)
{
case NORTH: case NORTH:
offset_y = 1; offset_y = 1;
break; break;
@ -105,24 +121,27 @@ void update_map(int orientation, int cur_x, int cur_y) {
mark_cell(car_path_grid, cur_x + offset_x, cur_y + offset_y); mark_cell(car_path_grid, cur_x + offset_x, cur_y + offset_y);
} }
// Function to print the map // Function to print the map
void print_map() { void
print_map()
{
// Invert the map, 0,0 is at the Middle // Invert the map, 0,0 is at the Middle
// Print 1 for visited cells and 0 for unvisited cells // Print 1 for visited cells and 0 for unvisited cells
for (int i = car_path_grid->rows - 1; i >= 0; i--) { for (int i = car_path_grid->rows - 1; i >= 0; i--)
for (int j = 0; j < car_path_grid->cols; j++) { {
for (int j = 0; j < car_path_grid->cols; j++)
{
(car_path_grid->data[j][i]) ? printf("1 ") : printf("0 "); (car_path_grid->data[j][i]) ? printf("1 ") : printf("0 ");
// case false: // case false:
// printf("0 "); // printf("0 ");
// break; // break;
// case true: // case true:
// printf("1 "); // printf("1 ");
// break; // break;
// } // }
} }
printf("\n"); printf("\n");
} }
} }
#endif //TEST_PROJECT_MAP_H #endif // TEST_PROJECT_MAP_H