huyongji1.1-system/Driver/Driver.c

337 lines
7.9 KiB
C
Raw Permalink Normal View History

2025-04-16 09:58:09 +08:00
#include "Driver.h"
2025-05-20 09:41:22 +08:00
uint8_t device_status[13] = {0}; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬Ϊ0
2025-04-16 09:58:09 +08:00
static uint8_t led1_status = 0; // LED1 ״̬<D7B4><CCAC>־λ<D6BE><CEBB>0 <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>1 <20><>ʾ<EFBFBD><CABE>
uint8_t biaozhi=0;
//ˮ<>õ<EFBFBD>ˮ<EFBFBD><CBAE>
uint32_t pump_flow = 0; // 5<><35><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>ۼ<EFBFBD><DBBC><EFBFBD><EFBFBD><EFBFBD>
uint8_t pump_running = 0; // ˮ<><CBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
uint32_t last_upload_time = 0; // <20>ϴ<EFBFBD><CFB4>ϴ<EFBFBD>ʱ<EFBFBD><CAB1>
uint32_t flow_to_upload = 0; // <20><>Ҫ<EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
uint8_t flow_need_upload = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>־λ
2025-05-20 09:41:22 +08:00
uint8_t biaozhi111 =0;
2025-04-16 09:58:09 +08:00
//״̬<D7B4>ϴ<EFBFBD>
Device_Fault_t device_fault = {0}; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
void LED1_Control(uint8_t state)
{
// <20><><EFBFBD><EFBFBD> LED ״̬
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
// <20><><EFBFBD>±<EFBFBD>־λ
led1_status = state; // <20><><EFBFBD>±<EFBFBD>־λΪ<CEBB><CEAA>ǰ״̬
// <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1>ǰ״̬
// printf("LED1: %s\n", state ? "ON" : "OFF");
}
//ˮ<><CBAE><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><D0BF><EFBFBD>
// <20><>֪ˮ<D6AA><CBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿСʱ1200<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>
// ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 1200<30><30>/60<36><30><EFBFBD><EFBFBD> = 20<32><30>/<2F><><EFBFBD><EFBFBD>
// ˮ<>ÿ<EFBFBD><C3BF>ƺ<EFBFBD><C6BA><EFBFBD>
// <20><><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>
// <20><><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD><DBBC><EFBFBD><EFBFBD><EFBFBD>
//static uint32_t total_flow = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Control_WaterPump(uint8_t state)
{
if(state) // ˮ<><CBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_1, GPIO_PIN_SET);
// <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>Ϣ
// printf("ˮ<><CBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - GPIOG_PIN1<4E><31><EFBFBD><EFBFBD>Ϊ<EFBFBD>ߵ<EFBFBD>ƽ\r\n");
}
else // ˮ<><CBAE>ֹͣ
{
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_1, GPIO_PIN_RESET);
// <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>Ϣ
// printf("ˮ<><CBAE>ֹͣ - GPIOG_PIN1<4E><31><EFBFBD><EFBFBD>Ϊ<EFBFBD>͵<EFBFBD>ƽ\r\n");
}
}
//<2F><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>
void Control_Fan1(uint8_t state)
{
if(state)
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_2, GPIO_PIN_SET);
else
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_2, GPIO_PIN_RESET);
}
//<2F><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>
void Control_Fan2(uint8_t state)
{
if(state)
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_3, GPIO_PIN_SET);
else
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_3, GPIO_PIN_RESET);
}
// <20><><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Ozone_Control(uint8_t state)
{
if(state)
{
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_6, GPIO_PIN_SET); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// printf("<22><><EFBFBD><EFBFBD><EFBFBD>ѿ<EFBFBD><D1BF><EFBFBD>\n");
}
else
{
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_6, GPIO_PIN_RESET); // <20>رճ<D8B1><D5B3><EFBFBD>
// printf("<22><><EFBFBD><EFBFBD><EFBFBD>ѹر<D1B9>\n");
}
}
void Control_Heater(uint8_t state)
{
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
// printf("<22><><EFBFBD><EFBFBD>Ĥ: %s\n", state ? "<22><><EFBFBD><EFBFBD>" : "<22>ر<EFBFBD>");
}
// <20><> Driver.c <20><><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3>׿<EFBFBD><D7BF>ƺ<EFBFBD><C6BA><EFBFBD>
// <20><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>ƣ<EFBFBD>PE2<45><32>
void Control_Plate1(uint8_t state)
{
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_2, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
device_status[9] = state; // <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>1״̬
}
// <20><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>ƣ<EFBFBD>PE3<45><33>
void Control_Plate2(uint8_t state)
{
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
device_status[10] = state; // <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>2״̬
}
void Control_Phosphorus(uint8_t state)
{
if(state)
{
2025-05-20 09:41:22 +08:00
// ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(polarity_state)
{
Control_Plate1(1); // <20><><EFBFBD><EFBFBD><31><CDA8>
Control_Plate2(0); // <20><><EFBFBD><EFBFBD>2<EFBFBD>ϵ<EFBFBD>
}
else
{
Control_Plate1(0); // <20><><EFBFBD><EFBFBD>1<EFBFBD>ϵ<EFBFBD>
Control_Plate2(1); // <20><><EFBFBD><EFBFBD><32><CDA8>
}
2025-04-16 09:58:09 +08:00
}
else
{
2025-05-20 09:41:22 +08:00
// <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>
2025-04-16 09:58:09 +08:00
Control_Plate1(0);
Control_Plate2(0);
}
2025-05-20 09:41:22 +08:00
}
void Control_Dredge(uint8_t state)
{
if(state) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_4, GPIO_PIN_SET);
// printf("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - GPIOG_PIN2<4E><32><EFBFBD><EFBFBD>Ϊ<EFBFBD>ߵ<EFBFBD>ƽ\r\n");
}
else // <20><><EFBFBD><EFBFBD>ֹͣ
{
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_4, GPIO_PIN_RESET); // <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
// printf("<22><><EFBFBD><EFBFBD>ֹͣ - GPIOG_PIN2<4E><32><EFBFBD><EFBFBD>Ϊ<EFBFBD>͵<EFBFBD>ƽ\r\n");
}
2025-04-16 09:58:09 +08:00
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>
uint8_t Read_Phosphorus_Status(void)
{
return (HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_2) || HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_3));
}
// <20><><EFBFBD>ӻ<EFBFBD>ȡ״̬<D7B4>ĺ<EFBFBD><C4BA><EFBFBD>
uint8_t Read_LED1_Status(void)
{
return HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_13);
}
uint8_t Read_WaterPump_Status(void)
{
return HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_1);
}
uint8_t Read_Fan1_Status(void)
{
return HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_2);
}
uint8_t Read_Fan2_Status(void)
{
return HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_3);
}
// Read_FloatBall<6C><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
uint8_t Read_FloatBall(void)
{
return (uint8_t)HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_5);
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬
uint8_t Ozone_GetState(void)
{
return HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_6);
}
uint8_t Read_Heater_Status(void)
{
return HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_9);
}
uint8_t Read_MainPower(void)
{
return HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_2); // <20><><EFBFBD><EFBFBD> 0 <20><> 1
}
//
uint8_t Read_Dredge_Status(void)
{
return HAL_GPIO_ReadPin(GPIOG, GPIO_PIN_4);
}
// <20><><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD><DBBC><EFBFBD><EFBFBD><EFBFBD>
// <20>ܿ<EFBFBD><DCBF>ؿ<EFBFBD><D8BF>ƺ<EFBFBD><C6BA><EFBFBD>
void Control_All_Devices(CmdState_t cmd)
{
if (cmd == CMD_ON) // <20><><EFBFBD><EFBFBD>
{
// <20><><EFBFBD><EFBFBD>ǿ<EFBFBD>ƹرձ<D8B1>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
force_pump_off = 0;
force_fan_off = 0;
2025-05-20 09:41:22 +08:00
biaozhi111=1;
2025-04-16 09:58:09 +08:00
// <20><>ǿ<EFBFBD><C7BF><EFBFBD>л<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ǰģʽ
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>л<EFBFBD>ģʽ<C4A3><CABD>Ӧ<EFBFBD><D3A6>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
}
else if (cmd == CMD_OFF) // <20>ػ<EFBFBD>
{
// <20><><EFBFBD>浱ǰģʽ
2025-05-20 09:41:22 +08:00
biaozhi111=0;
2025-04-16 09:58:09 +08:00
WorkMode current_mode_backup = current_mode;
// <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Control_WaterPump(0);
Control_Fan1(0);
Control_Fan2(0);
Control_Heater(0);
Ozone_Control(0);
// <20><><EFBFBD><EFBFBD>ǿ<EFBFBD>ƹرձ<D8B1>־
force_pump_off = 1;
force_fan_off = 1;
// <20><><EFBFBD>ֵ<EFBFBD>ǰģʽ<C4A3><CABD><EFBFBD><EFBFBD>
current_mode = current_mode_backup;
}
}
void Update_All_Status(void)
{
device_status[0] = led1_status; // LED1״̬
device_status[1] = Read_WaterPump_Status(); // ˮ<><CBAE>״̬
device_status[2] = Read_Fan1_Status(); // <20><><EFBFBD><EFBFBD>1״̬
device_status[3] = Read_Fan2_Status(); // <20><><EFBFBD><EFBFBD>2״̬
device_status[4] = Ozone_GetState(); // <20><><EFBFBD><EFBFBD>״̬
device_status[5] = Read_FloatBall(); // <20><><EFBFBD><EFBFBD>״̬
device_status[7] = Read_Heater_Status(); // <20><><EFBFBD><EFBFBD>״̬
device_status[8] = Read_MainPower(); // <20>е<EFBFBD>״̬
device_status[9] = Read_Phosphorus_Status(); //<2F><><EFBFBD><EFBFBD>״̬
device_status[10] =Read_Dredge_Status(); //<2F><><EFBFBD><EFBFBD>״̬
2025-05-20 09:41:22 +08:00
device_status[11] = biaozhi111; //<2F>ϴ<EFBFBD>״̬
2025-04-16 09:58:09 +08:00
}
// ˮ<>ù<EFBFBD><C3B9>ϼ<EFBFBD><CFBC><EFBFBD><E2BAAF>
// <20><>ȷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><E2BAAF>
void Check_Pump_Fault(void)
{
static uint32_t check_timer = 0;
uint8_t actual_status = Read_WaterPump_Status(); // <20><>ȡʵ<C8A1><CAB5>״̬
// <20>ȽϿ<C8BD><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>״̬
if(1 != actual_status) // <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬(1)<29><>һ<EFBFBD><D2BB>
{
check_timer++;
if(check_timer >= 10) // 10<31><30><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
{
device_fault.pump_fault = 1; // 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// printf("ˮ<>ù<EFBFBD><C3B9>ϣ<EFBFBD>\r\n");
}
}
else // ״̬һ<CCAC>£<EFBFBD><C2A3><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
check_timer = 0; // <20><><EFBFBD>ü<EFBFBD>ʱ<EFBFBD><CAB1>
device_fault.pump_fault = 0; // 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// printf("ˮ<><CBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
}
}
// <20><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>
void Check_Fan1_Fault(void)
{
static uint32_t check_timer = 0;
static uint8_t last_status = 0;
uint8_t current_status = Read_Fan1_Status(); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>1<EFBFBD><31>ǰ״̬
if(current_status != last_status)
{
check_timer++;
if(check_timer >= 10) // 10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><ECB3A3><EFBFBD>ж<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
{
device_fault.fan1_fault = 1;
// printf("<22><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>ϣ<EFBFBD>\r\n");
}
}
else
{
check_timer = 0;
device_fault.fan1_fault = 0;
}
last_status = current_status;
}
// <20><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>
void Check_Fan2_Fault(void)
{
static uint32_t check_timer = 0;
static uint8_t last_status = 0;
uint8_t current_status = Read_Fan2_Status(); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>2<EFBFBD><32>ǰ״̬
if(current_status != last_status)
{
check_timer++;
if(check_timer >= 10) // 10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><ECB3A3><EFBFBD>ж<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
{
device_fault.fan2_fault = 1;
// printf("<22><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>ϣ<EFBFBD>\r\n");
}
}
else
{
check_timer = 0;
device_fault.fan2_fault = 0;
}
last_status = current_status;
}
2025-05-20 09:41:22 +08:00