将报警两次关阀之间的6s延时改为定时器操作,提高了消音的实时性

This commit is contained in:
小马_666 2025-03-28 10:59:48 +08:00
parent 6cee19e4a0
commit e6568a7f57
9 changed files with 50 additions and 68 deletions

View File

@ -69,7 +69,12 @@
"ch32v30x.h": "c",
"lwutil.h": "c",
"ch32v30x_adc.h": "c",
"bsp_wdg.h": "c"
"bsp_wdg.h": "c",
"inet.h": "c",
"netdev.h": "c",
"at.h": "c",
"spi-bit-ops.h": "c",
"signal.h": "c"
},
"commentTranslate.multiLineMerge": true,
"C_Cpp.errorSquiggles": "disabled"

View File

@ -1,6 +1,4 @@
# 一、版本更新内容
## v1.0 完成基本功能和物联网功能
## v1.1 增加了修改服务器地址的功能增加了物联网接收部分CRC值校验功能##
## v1.6 增加了当上电失败时不发送其他事件的功能,以及掉电关闭模组功能,快速关机的功能
## v1.7 增加了报警和报警恢复,故障和故障恢复发送失败不断重试的功能
# 一、版本更新内容(V 1.2)
## 当前的版本,修复了以下问题:
-上传数据时的iccid 和imsi 顺序错误问题以及在数据写入flash时将IMSI写成LMEI的问题。

View File

@ -2,7 +2,7 @@
* @Author: mbw
* @Date: 2024-10-23 17:14:16
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-02-21 10:17:35
* @LastEditTime: 2025-03-28 10:58:16
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\applications\main.c
* @Descrt_thread_
*
@ -43,6 +43,16 @@ struct rt_timer work_cnt_timer;
rt_timer_t led_state_timer;
struct rt_timer alarm_emv_timer;
void Alarm_Emv_Timer_Callback(void *parameter)
{
EMV_CLOSE_VALVE;
}
void Send_Laser_Alarm_Event(AlarmEvent event_type);
static void Set_Event(AlarmEvent event_type)
@ -128,49 +138,6 @@ int _Self_Check_Mode(void)
return RT_EOK;
}
#if 0
void Preheat_Sensor(rt_uint32_t timeout_counter)
{
// 定义超时时间,单位为毫秒
#define TIMEOUT_MS 15000
timeout_counter += 10; // 每次递归增加10毫秒
if (H308.Data.checksum != 0)
{
BEEP_PREAT_OK;
LED_STOP(r);
LED_STOP(g);
LED_STOP(y);
LOG_D("预热完成");
BEEP_PREAT_OK;
Send_Laser_Alarm_Event(kNormalDetectionEvents);
}
else if (IS_H308_EndOfLife()) // 如果寿命到期,预热完成后直接到寿命过期状态
{
LED_STOP(r);
LED_STOP(g);
LED_STOP(y);
BEEP_PREAT_OK;
Send_Laser_Alarm_Event(kSensorFailureEvent);
}
else if ((timeout_counter >= TIMEOUT_MS) && (H308.Data.checksum == 0))
{
LED_STOP(r);
LED_STOP(g);
LED_STOP(y);
BEEP_PREAT_OK;
LOG_D("预热完成,传感器故障");
Send_Laser_Alarm_Event(kFaultEvent); // 传感器故障
}
else
{
rt_thread_mdelay(10);
Preheat_Sensor(timeout_counter);
}
}
#endif
void Work_Cnt_Timer_Callback(void *parameter)
{
work_duration++;
@ -187,6 +154,7 @@ void Work_Cnt_Timer_Callback(void *parameter)
int main(void)
{
#define WORK_TIMER_CNT (1000 * 60 * 60 * 24)
#define ALARM_EMV_TIMER_CNT (1000 * 6)
rt_err_t result = RT_EINVAL;
rt_uint32_t received_event;
@ -221,7 +189,12 @@ int main(void)
RT_NULL,
WORK_TIMER_CNT,
RT_TIMER_FLAG_PERIODIC);
rt_timer_start(&work_cnt_timer);
rt_timer_init(&alarm_emv_timer,
"alarm_emv_timer",
Alarm_Emv_Timer_Callback,
RT_NULL,
ALARM_EMV_TIMER_CNT,
RT_TIMER_FLAG_ONE_SHOT);
// 检测上电/掉电复位标志
if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET) // TODO:这块超级电容会造成掉电重启,并且标志是上电复位,只能通过其超级电容造成复位时事件创建失败进行判断,不治本
{
@ -344,8 +317,7 @@ int main(void)
#if (IOT_MODULE_SWITCH == 1)
Nt26k_Send_Event(kNt26kAlarmEvent);
#endif
rt_thread_mdelay(6000);
EMV_CLOSE_VALVE;
rt_timer_start(&alarm_emv_timer);
}
else if (received_event & Get_Sys_Event_Flag(kAlarmRcyEvent)) // 报警恢复
{

View File

@ -2,7 +2,7 @@
* @Author: mbw
* @Date: 2024-12-30 11:45:44
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-01-25 15:00:21
* @LastEditTime: 2025-03-17 13:29:41
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\inc\at_device_nt26k.h
* @Description:
* @
@ -63,8 +63,8 @@ struct at_device_nt26k
typedef struct __attribute__((packed))
{
uint8_t imei[15];
uint8_t iccid[20];
uint8_t imsi[15];
uint8_t iccid[20];
uint8_t rssi; // RSSI
uint8_t rsrp; // RSRP
uint8_t rsrq; // RSRQ

View File

@ -133,8 +133,8 @@ struct __attribute__((packed)) DataBody
uint8_t hw; // 硬件版本
uint8_t sw; // 软件版本
uint8_t imei[15]; // 设备编号IMEI
uint8_t iccid[20]; // ICCID
uint8_t imsi[15]; // IMSI
uint8_t iccid[20]; // ICCID
uint8_t rssi; // RSSI
uint8_t rsrp; // RSRP
uint8_t rsrq; // RSRQ

View File

@ -2,7 +2,7 @@
* @Author : stark1898y 1658608470@qq.com
* @Date : 2024-09-04 13:33:49
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-03-17 11:43:44
* @LastEditTime: 2025-03-17 16:02:22
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\at_device_nt26k.c
* @Description :
*
@ -1005,8 +1005,8 @@ static void nt26k_init_thread_entry(void *parameter)
else
{
// 已经写入了,将其赋值给结构体
rt_memset((char *)nt26k.imsi, 0, NT26K_IMSI_LEN);
Get_IotImsi((char *)&nt26k.imsi[0], NT26K_IMSI_LEN);//这块原来写错了写成饿了IMEI所以发上去的也是IMEI号码
rt_memset((char *)nt26k.imsi, 0, FLASH_IOT_IMSI_LEN);
Get_IotImsi((char *)&nt26k.imsi[0], FLASH_IOT_IMSI_LEN);//这块原来写错了写成饿了IMEI所以发上去的也是IMEI号码
}
/* check signal strength */
for (i = 0; i < CSQ_RETRY; i++)

View File

@ -2,7 +2,7 @@
* @Author: mbw
* @Date: 2024-11-14 10:21:04
* @LastEditors: mbw && 1600520629@qq.com
* @LastEditTime: 2025-02-17 11:17:13
* @LastEditTime: 2025-03-25 10:14:38
* @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\src\bsp_h308.c
* @Description:
*
@ -428,6 +428,7 @@ int BSP_H308_Init(void)
}
INIT_COMPONENT_EXPORT(BSP_H308_Init);
void UART4_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
void UART4_IRQHandler(void)
{

View File

@ -147,26 +147,32 @@ TsFrameData *HR_GetFrameData(const rt_uint8_t *p_src, const rt_uint8_t src_len)
return get_buffer;
}
rt_uint8_t HR_GenerateRawFrame(TsRawFrameData *pRawData, rt_uint8_t c1, TeFrameC2 c2, const rt_uint8_t *p_src, rt_uint8_t src_len)
uint8_t HR_GenerateRawFrame(TsRawFrameData *pRawData, uint8_t c1, TeFrameC2 c2, const uint8_t *p_src, uint8_t src_len)
{
pRawData->len = src_len + 6;
rt_memset(pRawData->buf, 0, sizeof(pRawData->buf));
memset(pRawData->buf, 0, sizeof(pRawData->buf));
pRawData->buf[0] = FRAME_HEADER;
pRawData->buf[1] = c1;
pRawData->buf[2] = c2;
pRawData->buf[3] = src_len;
rt_memmove(&pRawData->buf[4], p_src, src_len);
if ((c2 != kNumOfRecords) && (c2 != kGetCurrentTime))
{
pRawData->buf[4] = c1;
memmove(&pRawData->buf[5], p_src, src_len);
}
else
{
memmove(&pRawData->buf[4], p_src, src_len);
}
// 从帧起始符开始到校验码之前所有字节的和的模256
// 即各字节不计超过255的溢出值的二进制算术和。
pRawData->buf[pRawData->len - 2] = HR_CheckSum(&pRawData->buf[0], pRawData->len - 2);
pRawData->buf[pRawData->len - 1] = FRAME_TAIL;
// LOG_HEX("HrRawData", 16, &pRawData->buf[0], pRawData->len);
return RT_EOK;
}

View File

@ -43,7 +43,7 @@
#include "stdint.h"
#define FLEX_BTN_SCAN_FREQ_HZ 40 // How often flex_button_scan () is called
#define FLEX_BTN_SCAN_FREQ_HZ 20 // How often flex_button_scan () is called
#define FLEX_MS_TO_SCAN_CNT(ms) (ms / (1000 / FLEX_BTN_SCAN_FREQ_HZ)) //
/* Multiple clicks interval, default 300ms */
#define MAX_MULTIPLE_CLICKS_INTERVAL (FLEX_MS_TO_SCAN_CNT(300))