#ifndef __SOIL_SENSOR_H #define __SOIL_SENSOR_H #ifdef __cplusplus extern "C" { #endif #include "main.h" #define SOIL_SENSOR_RAW_MAX_LEN 40U #define SOIL_SENSOR_SCAN_RESULT_MAX 10U #define SOIL_SENSOR_STATUS_UART_ERROR 0x01U #define SOIL_SENSOR_STATUS_FRAME_ERROR 0x02U #define SOIL_SENSOR_STATUS_CRC_ERROR 0x04U #define SOIL_SENSOR_STATUS_ENV_ERROR 0x10U #define SOIL_SENSOR_STATUS_NPK_ERROR 0x20U #define SOIL_SENSOR_STATUS_SHT_ERROR 0x40U typedef struct { uint16_t humidity; int16_t temperature; uint16_t sht_humidity; int16_t sht_temperature; uint16_t ph; uint16_t nitrogen; uint16_t phosphorus; uint16_t potassium; } SoilNpkData_t; extern volatile uint8_t soil_last_status; extern volatile uint8_t soil_last_rx_len; extern volatile uint8_t soil_last_response[SOIL_SENSOR_RAW_MAX_LEN]; extern volatile uint8_t soil_last_command; extern volatile uint8_t soil_last_hal_error; extern volatile uint16_t soil_last_value; extern volatile uint8_t soil_env_humidity_status; extern volatile uint8_t soil_env_temperature_status; extern volatile uint8_t soil_env_ph_status; extern volatile uint8_t soil_npk_status; extern volatile uint8_t soil_sht_status; extern volatile uint8_t soil_npk_debug_command; extern volatile uint8_t soil_npk_debug_rx_len; extern volatile uint8_t soil_npk_debug_data_hi; extern volatile uint8_t soil_npk_debug_data_lo; extern volatile uint8_t soil_npk_debug_source; extern volatile uint8_t soil_npk_debug_low_status; extern volatile uint8_t soil_npk_debug_n_status; extern volatile uint8_t soil_npk_debug_p_status; extern volatile uint8_t soil_npk_debug_k_status; extern volatile uint16_t soil_dma_rx_remaining; extern volatile HAL_StatusTypeDef soil_tx_ret; extern volatile HAL_StatusTypeDef soil_rx_ret; extern volatile uint8_t soil_scan_done; extern volatile uint32_t soil_scan_active_baud; extern volatile uint8_t soil_scan_current_address; extern volatile uint8_t soil_scan_9600_count; extern volatile uint8_t soil_scan_4800_count; extern volatile uint8_t soil_scan_9600_addresses[SOIL_SENSOR_SCAN_RESULT_MAX]; extern volatile uint8_t soil_scan_4800_addresses[SOIL_SENSOR_SCAN_RESULT_MAX]; extern volatile uint16_t soil_scan_9600_values[SOIL_SENSOR_SCAN_RESULT_MAX]; extern volatile uint16_t soil_scan_4800_values[SOIL_SENSOR_SCAN_RESULT_MAX]; extern volatile uint8_t soil_id_change_sensor; extern volatile uint8_t soil_id_change_status; extern volatile uint8_t soil_id_change_old_address; extern volatile uint8_t soil_id_change_new_address; void SoilSensor_Init(void); uint8_t SoilSensor_Read(SoilNpkData_t *data); uint8_t SoilSensor_ChangeAddress(uint8_t oldAddress, uint8_t newAddress); void SoilSensor_ScanAddresses(void); void SoilSensor_RunIdTool(void); #ifdef __cplusplus } #endif #endif