使用任务做外部事件,避免外部业务执行过长,影响触摸开关的继电器动作

This commit is contained in:
cdyong 2016-10-31 08:01:55 +00:00
parent eafd830018
commit 39e3b045d3
2 changed files with 23 additions and 5 deletions

View File

@ -55,6 +55,11 @@ void Button_GrayLevel::Set(Pin key, Pin relay, bool relayInvert)
Key.UsePress(); Key.UsePress();
Key.Open(); Key.Open();
//面板事件
if (!_task3)
{
_task3 = Sys.AddTask(&Button_GrayLevel::ReportPress, this, -1, -1, "面板事件");
}
if (relay != P0) Relay.Init(relay, relayInvert).Open(); if (relay != P0) Relay.Init(relay, relayInvert).Open();
} }
@ -126,7 +131,7 @@ void Button_GrayLevel::OnPress(InputPort& port, bool down)
port.PressTime = 0; // 保险一下,以免在延时关闭更新状态的时候误判造成重启 port.PressTime = 0; // 保险一下,以免在延时关闭更新状态的时候误判造成重启
return; return;
} }
if(time < 3800) if (time < 3800)
{ {
debug_printf("15s\r\n"); debug_printf("15s\r\n");
DelayClose2(15 * 1000); DelayClose2(15 * 1000);
@ -147,10 +152,18 @@ void Button_GrayLevel::OnPress(InputPort& port, bool down)
} }
} }
// if (_Handler) _Handler(this, _Param); // if (_Handler) _Handler(this, _Param);
if (_task3)
Sys.SetTask(_task3, true, 0);
else
Press(*this); Press(*this);
} }
} }
void Button_GrayLevel::ReportPress()
{
Press(*this);
}
void Close2Task(void * param) void Close2Task(void * param)
{ {
auto bt = (Button_GrayLevel *)param; auto bt = (Button_GrayLevel *)param;
@ -163,7 +176,7 @@ void Close2Task(void * param)
else else
{ {
bt->delaytime = 0; bt->delaytime = 0;
debug_printf("延时关闭已完成 删除任务 0x%08X\r\n",bt->_task2); debug_printf("延时关闭已完成 删除任务 0x%08X\r\n", bt->_task2);
Sys.RemoveTask(bt->_task2); Sys.RemoveTask(bt->_task2);
bt->_task2 = 0; bt->_task2 = 0;
bt->SetValue(false); bt->SetValue(false);

View File

@ -81,6 +81,11 @@ public:
void DelayClose2(int ms); // 自定义延时关闭 void DelayClose2(int ms); // 自定义延时关闭
int delaytime = 0; int delaytime = 0;
uint _task2 = 0; uint _task2 = 0;
//上报状态变化
uint _task3 = 0;
void ReportPress();
// 过零检测 // 过零检测
private: private:
static int ACZeroAdjTime; // 过零检测时间补偿 默认 2300us static int ACZeroAdjTime; // 过零检测时间补偿 默认 2300us