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

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)
{
// ??????
gValveData.bat = BSP_ReadVbat();
if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE)
{
gValveData.switch_status = kClosed;
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
}
else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE)

View File

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

View File

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

View File

@ -9,11 +9,12 @@
#define KEY_TIMOUT_MS 1000
#define KEY_LONG_PRESS_MS 5000
#define KEY_SACN_MS 40
#define KEY_IDLE_TIMEOUT_MS 10000
#define KEY_SCAN_EVT (0x0001 << 0)
#define KEY_WAKEUP_EVT (0x0001 << 1)
#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
#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)
{
motor_flag = 0;
gValveData.switch_status = kOpened;
LED_VALVE_OPEN;
VALVE_OPEN();
// DelayMs(1000);
@ -784,6 +783,18 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
logDebug("motor/LED close!!!");
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
return (events ^ CHECK_EVT_START);
}
@ -791,12 +802,12 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
{
VALVE_STOP();
logDebug("motor STOP");
DelayMs(1500);
if(fault_state == 4)
{
IotFlag_t.Valve_Close_flag = 1;
Iot_Send_Data();
}
// DelayMs(1500);
// if(fault_state == 4)
// {
// IotFlag_t.Valve_Close_flag = 1;
// Iot_Send_Data();
// }
return (events ^ MOTOR_STOP_EVT);
}
return 0;

View File

@ -5,6 +5,7 @@
#include "bsp_ml307r.h"
#include "log.h"
#include "SLEEP.h"
#include "bsp_valve.h"
// 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_timeout_flag = 0;
volatile uint8_t press_count = 0;
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);
}
if (events & KEY_IDLE_TIMEOUT_EVT)
{
press_count = 0;
return (events ^ KEY_IDLE_TIMEOUT_EVT);
}
// Discard unknown events
return 0;
}
@ -319,42 +325,47 @@ __HIGH_CODE
__attribute__((noinline))
void KEY_ProcessLoop(void)
{
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");
// }
// }
// static uint8_t key_flag = 0;
if (key_wakeup_flag)
{
key_wakeup_flag = 0;
key_flag = !key_flag;
if(key_flag)
press_count++;
if (press_count == 1)
{
motor_flag = 3;
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 {
}else
{
motor_flag = 2;
logDebug("motor close");
logDebug("motor_flag_start = %d",motor_flag);
}
// 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);
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;
tmos_stop_task(ml307_task_id, ML307_PERIODIC_EVT);
PFIC_DisableIRQ(UART1_IRQn);
BSP_RequestSleep();
}else{
// BSP_Ml307_Power_Off(); //¹Ø»ú
tmos_stop_task(ml307_task_id, ML307_PERIODIC_EVT);
PFIC_DisableIRQ(UART1_IRQn);
BSP_RequestSleep();
}
IotFlag_t.Date_Sending_flag = 0;
@ -519,7 +521,7 @@ static int BSP_Module_Connect_CtWing_Handle(at_env_t *e)
{
case 0:
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->state++;
break;

View File

@ -5,13 +5,14 @@
* Author: 123
*/
#include "bsp_motor.h"
#include "bsp_valve.h"
//uint8_t motor_state = 0;
valve_state valve_status = {0};
void BSP_MOTOR_Init(void)
{
GPIOA_ResetBits(COIL_ADC);
GPIOA_ModeCfg(COIL_ADC, GPIO_ModeOut_PP_5mA);
// GPIOA_ResetBits(COIL_ADC);
// GPIOA_ModeCfg(COIL_ADC, GPIO_ModeOut_PP_5mA);
GPIOB_ResetBits(COIL_A);
GPIOB_ModeCfg(COIL_A, GPIO_ModeOut_PP_5mA);
@ -23,25 +24,27 @@ void BSP_MOTOR_Init(void)
}
void VALVE_OPEN(void)
{
GPIOA_SetBits(COIL_ADC);
// GPIOA_SetBits(COIL_ADC);
//IN1 + ; IN2 -
GPIOB_SetBits(COIL_A);
GPIOB_ResetBits(COIL_B);
valve_status.motor_state = 1;
gValveData.switch_status = kOpened;
}
void VALVE_CLOSE(void)
{
GPIOA_SetBits(COIL_ADC);
// GPIOA_SetBits(COIL_ADC);
//IN1 - ; IN2 +
GPIOB_ResetBits(COIL_A);
GPIOB_SetBits(COIL_B);
valve_status.motor_state = 0;
gValveData.switch_status = kClosed;
}
void VALVE_STOP(void)
{
GPIOA_ResetBits(COIL_ADC);
// GPIOA_ResetBits(COIL_ADC);
//IN1 + ; IN2 +
GPIOB_SetBits(COIL_A);
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) // 阀门关闭结束事件
{
VALVE_STOP();
LED_ALL_CLOSE;
gValveData.switch_status = kClosed;
tmos_memset(&RelyData, 0, sizeof(RelyData));
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) // 阀门打开结束事件
{
VALVE_STOP();
LED_ALL_CLOSE;
gValveData.switch_status = kOpened;
tmos_memset(&RelyData, 0, sizeof(RelyData));
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) // 阀门初始化函数
{
vavle_task_id = TMOS_ProcessEventRegister(VAVLE_Task_ProcessEvent);
tmos_memset(&gValveData, 0, sizeof(gValveData));
gValveData.switch_status = kClosed; // 设置阀门状态为关闭
gValveData.temp = -100;
gValveData.in_pressure = 0;
gValveData.out_pressure = 0;