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

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();
} }
@ -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;

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