代码暂存 按键第一次按下显示当前状态,第二次再改变电机状态

This commit is contained in:
常正强 2025-05-21 13:19:23 +08:00
parent a68193b154
commit 4a3e00f133
9 changed files with 81 additions and 58 deletions

View File

@ -715,11 +715,9 @@ static void peripheralStateNotificationCB(gapRole_States_t newState, gapRoleEven
*/ */
static void performPeriodicTask(void) static void performPeriodicTask(void)
{ {
// ??????
gValveData.bat = BSP_ReadVbat(); gValveData.bat = BSP_ReadVbat();
if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE) if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE)
{ {
gValveData.switch_status = kClosed;
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT); tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
} }
else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE) else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE)

View File

@ -103,7 +103,6 @@ int main(void)
MultiTimerInstall((PlatformTicksFunction_t)BSP_Get_Tick); MultiTimerInstall((PlatformTicksFunction_t)BSP_Get_Tick);
BSP_KEY_Init(app_task_handler); BSP_KEY_Init(app_task_handler);
// BSP_MOTOR_Init();
BSP_VAVLE_Init(); BSP_VAVLE_Init();
BSP_LED_Init(); BSP_LED_Init();
@ -111,8 +110,8 @@ int main(void)
BSP_VBAT_Init(); BSP_VBAT_Init();
logDebug("VBAT init ok\n"); logDebug("VBAT init ok\n");
BSP_Ml307r_Init(); // BSP_Ml307r_Init();
logDebug("BSP_M1307r ok\n"); // logDebug("BSP_M1307r ok\n");
ShowRestartReason(); ShowRestartReason();
IWDG_Init(5000); IWDG_Init(5000);

View File

@ -1,3 +1,9 @@
1.电机停止需判断COIL_ADC优化 1.按键第一次按下显示当前状态,第二次再改变电机状态
2.低电压判断及后续处理 2.蓝牙连接成功及断开显示
3.暂时屏蔽4G 3.json格式优化
4.服务器对接测试
5.气压传感器数值测试
6.低功耗优化
7.电机停止需判断COIL_ADC优化
8.低电压判断及后续处理

View File

@ -9,11 +9,12 @@
#define KEY_TIMOUT_MS 1000 #define KEY_TIMOUT_MS 1000
#define KEY_LONG_PRESS_MS 5000 #define KEY_LONG_PRESS_MS 5000
#define KEY_SACN_MS 40 #define KEY_SACN_MS 40
#define KEY_IDLE_TIMEOUT_MS 10000
#define KEY_SCAN_EVT (0x0001 << 0) #define KEY_SCAN_EVT (0x0001 << 0)
#define KEY_WAKEUP_EVT (0x0001 << 1) #define KEY_WAKEUP_EVT (0x0001 << 1)
#define KEY_RELEASE_EVT (0x0001 << 2) #define KEY_RELEASE_EVT (0x0001 << 2)
#define KEY_IDLE_TIMEOUT_EVT (0x0001 << 2) #define KEY_IDLE_TIMEOUT_EVT (0x0001 << 3)
// KEY_B_PIN at PB7,low->active // KEY_B_PIN at PB7,low->active
#define KEY_A_PIN GPIO_Pin_7 #define KEY_A_PIN GPIO_Pin_7

View File

@ -765,7 +765,6 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
if(motor_flag == 1) if(motor_flag == 1)
{ {
motor_flag = 0; motor_flag = 0;
gValveData.switch_status = kOpened;
LED_VALVE_OPEN; LED_VALVE_OPEN;
VALVE_OPEN(); VALVE_OPEN();
// DelayMs(1000); // DelayMs(1000);
@ -784,6 +783,18 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
logDebug("motor/LED close!!!"); logDebug("motor/LED close!!!");
tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS)); tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS));
} }
else if(motor_flag == 3)
{
motor_flag = 0;
if(gValveData.switch_status == kOpened)
{
LED_VALVE_OPEN;
}else
{
LED_VALVE_CLOSE;
}
// DelayMs(500);
}
tmos_start_task(check_task_id, CHECK_EVT_START, MS1_TO_SYSTEM_TIME(200)); //100 tmos_start_task(check_task_id, CHECK_EVT_START, MS1_TO_SYSTEM_TIME(200)); //100
return (events ^ CHECK_EVT_START); return (events ^ CHECK_EVT_START);
} }
@ -791,12 +802,12 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
{ {
VALVE_STOP(); VALVE_STOP();
logDebug("motor STOP"); logDebug("motor STOP");
DelayMs(1500); // DelayMs(1500);
if(fault_state == 4) // if(fault_state == 4)
{ // {
IotFlag_t.Valve_Close_flag = 1; // IotFlag_t.Valve_Close_flag = 1;
Iot_Send_Data(); // Iot_Send_Data();
} // }
return (events ^ MOTOR_STOP_EVT); return (events ^ MOTOR_STOP_EVT);
} }
return 0; return 0;

View File

@ -5,6 +5,7 @@
#include "bsp_ml307r.h" #include "bsp_ml307r.h"
#include "log.h" #include "log.h"
#include "SLEEP.h" #include "SLEEP.h"
#include "bsp_valve.h"
// https://www.cnblogs.com/iot-fan/p/14304943.html // https://www.cnblogs.com/iot-fan/p/14304943.html
@ -19,6 +20,7 @@ tmosTaskID key_task_id = INVALID_TASK_ID;
volatile uint8_t key_wakeup_flag = 0; volatile uint8_t key_wakeup_flag = 0;
volatile uint8_t key_timeout_flag = 0; volatile uint8_t key_timeout_flag = 0;
volatile uint8_t press_count = 0;
static app_task_evt_handler_t p_handler = NULL; static app_task_evt_handler_t p_handler = NULL;
@ -142,7 +144,11 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
} }
return (events ^ KEY_SCAN_EVT); return (events ^ KEY_SCAN_EVT);
} }
if (events & KEY_IDLE_TIMEOUT_EVT)
{
press_count = 0;
return (events ^ KEY_IDLE_TIMEOUT_EVT);
}
// Discard unknown events // Discard unknown events
return 0; return 0;
} }
@ -319,42 +325,47 @@ __HIGH_CODE
__attribute__((noinline)) __attribute__((noinline))
void KEY_ProcessLoop(void) void KEY_ProcessLoop(void)
{ {
static uint8_t key_flag = 0; // static uint8_t key_flag = 0;
// {
// if (R16_PB_INT_IF & KEY_B_PIN)
// {
// R16_PB_INT_IF = KEY_B_PIN;
// tmos_set_event(key_task_id, KEY_SCAN_EVT);
// logDebug("KEY_ProcessLoop");
// }
// }
if (key_wakeup_flag) if (key_wakeup_flag)
{ {
key_wakeup_flag = 0; key_wakeup_flag = 0;
key_flag = !key_flag; press_count++;
if(key_flag)
if (press_count == 1)
{ {
motor_flag = 1; motor_flag = 3;
logDebug("motor open");
}
else {
motor_flag = 2;
logDebug("motor close");
logDebug("motor_flag_start = %d",motor_flag); logDebug("motor_flag_start = %d",motor_flag);
tmos_start_task(key_task_id, KEY_IDLE_TIMEOUT_EVT, MS1_TO_SYSTEM_TIME(KEY_IDLE_TIMEOUT_MS));
} }
else if (press_count >= 2)
{
tmos_start_task(key_task_id, KEY_IDLE_TIMEOUT_EVT, MS1_TO_SYSTEM_TIME(KEY_IDLE_TIMEOUT_MS));
if(gValveData.switch_status == kClosed)
{
motor_flag = 1;
logDebug("motor open");
}else
{
motor_flag = 2;
logDebug("motor close");
}
// key_flag = !key_flag;
// if(key_flag)
// {
// motor_flag = 1;
// logDebug("motor open");
// }
// else {
// motor_flag = 2;
// logDebug("motor close");
// }
// press_count = 0;
}
tmos_set_event(key_task_id, KEY_SCAN_EVT); tmos_set_event(key_task_id, KEY_SCAN_EVT);
logDebug("KEY_ProcessLoop"); logDebug("KEY_ProcessLoop");
} }
// if (key_wakeup_flag)
// {
// key_wakeup_flag = 0;
// tmos_set_event(key_task_id, KEY_SCAN_EVT);
// // tmos_start_task(key_task_id, KEY_SCAN_EVT, MS1_TO_SYSTEM_TIME(20));
// // tmos_start_task(key_task_id, KEY_IDLE_TIMEOUT_EVT, MS1_TO_SYSTEM_TIME(1000 * 10));
// logDebug("key_wakeup_flag");
// }
} }

View File

@ -153,10 +153,12 @@ void StopTask_CallBack(MultiTimer* timer, void* userData)
{ {
IotFlag_t.PowerOn_error_flag = 0; IotFlag_t.PowerOn_error_flag = 0;
tmos_stop_task(ml307_task_id, ML307_PERIODIC_EVT); tmos_stop_task(ml307_task_id, ML307_PERIODIC_EVT);
PFIC_DisableIRQ(UART1_IRQn);
BSP_RequestSleep(); BSP_RequestSleep();
}else{ }else{
// BSP_Ml307_Power_Off(); //¹Ø»ú // BSP_Ml307_Power_Off(); //¹Ø»ú
tmos_stop_task(ml307_task_id, ML307_PERIODIC_EVT); tmos_stop_task(ml307_task_id, ML307_PERIODIC_EVT);
PFIC_DisableIRQ(UART1_IRQn);
BSP_RequestSleep(); BSP_RequestSleep();
} }
IotFlag_t.Date_Sending_flag = 0; IotFlag_t.Date_Sending_flag = 0;
@ -519,7 +521,7 @@ static int BSP_Module_Connect_CtWing_Handle(at_env_t *e)
{ {
case 0: case 0:
logDebug("create device...\r\n"); logDebug("create device...\r\n");
e->println(e, "AT+MIPOPEN=0,\"TCP\",\"112.125.89.8\",45663,,1"); // 8.135.10.183,32994 e->println(e, "AT+MIPOPEN=0,\"TCP\",\"112.125.89.8\",42286,,1"); // 8.135.10.183,32994
e->reset_timer(e); e->reset_timer(e);
e->state++; e->state++;
break; break;

View File

@ -5,13 +5,14 @@
* Author: 123 * Author: 123
*/ */
#include "bsp_motor.h" #include "bsp_motor.h"
#include "bsp_valve.h"
//uint8_t motor_state = 0; //uint8_t motor_state = 0;
valve_state valve_status = {0}; valve_state valve_status = {0};
void BSP_MOTOR_Init(void) void BSP_MOTOR_Init(void)
{ {
GPIOA_ResetBits(COIL_ADC); // GPIOA_ResetBits(COIL_ADC);
GPIOA_ModeCfg(COIL_ADC, GPIO_ModeOut_PP_5mA); // GPIOA_ModeCfg(COIL_ADC, GPIO_ModeOut_PP_5mA);
GPIOB_ResetBits(COIL_A); GPIOB_ResetBits(COIL_A);
GPIOB_ModeCfg(COIL_A, GPIO_ModeOut_PP_5mA); GPIOB_ModeCfg(COIL_A, GPIO_ModeOut_PP_5mA);
@ -23,25 +24,27 @@ void BSP_MOTOR_Init(void)
} }
void VALVE_OPEN(void) void VALVE_OPEN(void)
{ {
GPIOA_SetBits(COIL_ADC); // GPIOA_SetBits(COIL_ADC);
//IN1 + ; IN2 - //IN1 + ; IN2 -
GPIOB_SetBits(COIL_A); GPIOB_SetBits(COIL_A);
GPIOB_ResetBits(COIL_B); GPIOB_ResetBits(COIL_B);
valve_status.motor_state = 1; valve_status.motor_state = 1;
gValveData.switch_status = kOpened;
} }
void VALVE_CLOSE(void) void VALVE_CLOSE(void)
{ {
GPIOA_SetBits(COIL_ADC); // GPIOA_SetBits(COIL_ADC);
//IN1 - ; IN2 + //IN1 - ; IN2 +
GPIOB_ResetBits(COIL_A); GPIOB_ResetBits(COIL_A);
GPIOB_SetBits(COIL_B); GPIOB_SetBits(COIL_B);
valve_status.motor_state = 0; valve_status.motor_state = 0;
gValveData.switch_status = kClosed;
} }
void VALVE_STOP(void) void VALVE_STOP(void)
{ {
GPIOA_ResetBits(COIL_ADC); // GPIOA_ResetBits(COIL_ADC);
//IN1 + ; IN2 + //IN1 + ; IN2 +
GPIOB_SetBits(COIL_A); GPIOB_SetBits(COIL_A);
GPIOB_SetBits(COIL_B); GPIOB_SetBits(COIL_B);

View File

@ -282,11 +282,8 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀
if (events & VAVLE_CLOSE_END_EVT) // 阀门关闭结束事件 if (events & VAVLE_CLOSE_END_EVT) // 阀门关闭结束事件
{ {
VALVE_STOP(); VALVE_STOP();
LED_ALL_CLOSE; LED_ALL_CLOSE;
gValveData.switch_status = kClosed;
tmos_memset(&RelyData, 0, sizeof(RelyData)); tmos_memset(&RelyData, 0, sizeof(RelyData));
BSP_VALVE_Generate_ValveResponse(&RelyData, kCmdCloseVavle, 1); BSP_VALVE_Generate_ValveResponse(&RelyData, kCmdCloseVavle, 1);
@ -331,11 +328,8 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀
if (events & VAVLE_OPEN_END_EVT) // 阀门打开结束事件 if (events & VAVLE_OPEN_END_EVT) // 阀门打开结束事件
{ {
VALVE_STOP(); VALVE_STOP();
LED_ALL_CLOSE; LED_ALL_CLOSE;
gValveData.switch_status = kOpened;
tmos_memset(&RelyData, 0, sizeof(RelyData)); tmos_memset(&RelyData, 0, sizeof(RelyData));
BSP_VALVE_Generate_ValveResponse(&RelyData, kCmdOpenVavle, 1); BSP_VALVE_Generate_ValveResponse(&RelyData, kCmdOpenVavle, 1);
@ -415,10 +409,8 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀
void BSP_VAVLE_Init(void) // 阀门初始化函数 void BSP_VAVLE_Init(void) // 阀门初始化函数
{ {
vavle_task_id = TMOS_ProcessEventRegister(VAVLE_Task_ProcessEvent); vavle_task_id = TMOS_ProcessEventRegister(VAVLE_Task_ProcessEvent);
tmos_memset(&gValveData, 0, sizeof(gValveData)); tmos_memset(&gValveData, 0, sizeof(gValveData));
gValveData.switch_status = kClosed; // 设置阀门状态为关闭
gValveData.temp = -100; gValveData.temp = -100;
gValveData.in_pressure = 0; gValveData.in_pressure = 0;
gValveData.out_pressure = 0; gValveData.out_pressure = 0;