输入口增加按下时间统计,利于长按按钮的功能统计
This commit is contained in:
parent
da95bed688
commit
586b14d99c
|
@ -44,10 +44,10 @@ void Button::Set(Pin key, Pin led, bool ledInvert, Pin relay, bool relayInvert)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button::OnPress(Pin pin, bool down, void* param)
|
void Button::OnPress(InputPort* port, bool down, void* param)
|
||||||
{
|
{
|
||||||
Button* btn = (Button*)param;
|
Button* btn = (Button*)param;
|
||||||
if(btn) btn->OnPress(pin, down);
|
if(btn) btn->OnPress(port->_Pin, down);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button::OnPress(Pin pin, bool down)
|
void Button::OnPress(Pin pin, bool down)
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
class Button : public Object, public ByteDataPort
|
class Button : public Object, public ByteDataPort
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
static void OnPress(Pin pin, bool down, void* param);
|
static void OnPress(InputPort* port, bool down, void* param);
|
||||||
void OnPress(Pin pin, bool down);
|
void OnPress(Pin pin, bool down);
|
||||||
|
|
||||||
EventHandler _Handler;
|
EventHandler _Handler;
|
||||||
|
|
|
@ -70,10 +70,10 @@ void Button_GrayLevel::RenewGrayLevel()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button_GrayLevel::OnPress(Pin pin, bool down, void* param)
|
void Button_GrayLevel::OnPress(InputPort* port, bool down, void* param)
|
||||||
{
|
{
|
||||||
Button_GrayLevel* btn = (Button_GrayLevel*)param;
|
Button_GrayLevel* btn = (Button_GrayLevel*)param;
|
||||||
if(btn) btn->OnPress(pin, down);
|
if(btn) btn->OnPress(port->_Pin, down);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button_GrayLevel::OnPress(Pin pin, bool down)
|
void Button_GrayLevel::OnPress(Pin pin, bool down)
|
||||||
|
|
|
@ -22,7 +22,7 @@ struct ButtonPin
|
||||||
class Button_GrayLevel : public ByteDataPort
|
class Button_GrayLevel : public ByteDataPort
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
static void OnPress(Pin pin, bool down, void* param);
|
static void OnPress(InputPort* port, bool down, void* param);
|
||||||
void OnPress(Pin pin, bool down);
|
void OnPress(Pin pin, bool down);
|
||||||
|
|
||||||
EventHandler _Handler;
|
EventHandler _Handler;
|
||||||
|
|
|
@ -61,10 +61,10 @@ Button_magnetic::~Button_magnetic()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Button_magnetic::OnPress(Pin pin, bool down, void* param)
|
void Button_magnetic::OnPress(InputPort* port, bool down, void* param)
|
||||||
{
|
{
|
||||||
Button_magnetic * btn = (Button_magnetic*)param;
|
Button_magnetic * btn = (Button_magnetic*)param;
|
||||||
if(btn) btn->OnPress(pin, down);
|
if(btn) btn->OnPress(port->_Pin, down);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button_magnetic::OnPress(Pin pin, bool down)
|
void Button_magnetic::OnPress(Pin pin, bool down)
|
||||||
|
|
|
@ -17,7 +17,7 @@ class Button_magnetic
|
||||||
private:
|
private:
|
||||||
void Init();
|
void Init();
|
||||||
|
|
||||||
static void OnPress(Pin pin, bool down, void* param);
|
static void OnPress(InputPort* port, bool down, void* param);
|
||||||
void OnPress(Pin pin, bool down);
|
void OnPress(Pin pin, bool down);
|
||||||
|
|
||||||
EventHandler _Handler;
|
EventHandler _Handler;
|
||||||
|
|
|
@ -53,10 +53,10 @@ Sensor::~Sensor()
|
||||||
Mag = NULL;
|
Mag = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sensor::OnPress(Pin pin, bool down, void* param)
|
void Sensor::OnPress(InputPort* port, bool down, void* param)
|
||||||
{
|
{
|
||||||
Sensor* btn = (Sensor*)param;
|
Sensor* btn = (Sensor*)param;
|
||||||
if(btn) btn->OnPress(pin, down);
|
if(btn) btn->OnPress(port->_Pin, down);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sensor::OnPress(Pin pin, bool down)
|
void Sensor::OnPress(Pin pin, bool down)
|
||||||
|
|
|
@ -41,7 +41,7 @@ public:
|
||||||
private:
|
private:
|
||||||
void Init();
|
void Init();
|
||||||
|
|
||||||
static void OnPress(Pin pin, bool down, void* param);
|
static void OnPress(InputPort* port, bool down, void* param);
|
||||||
void OnPress(Pin pin, bool down);
|
void OnPress(Pin pin, bool down);
|
||||||
|
|
||||||
EventHandler _Handler;
|
EventHandler _Handler;
|
||||||
|
|
|
@ -995,7 +995,7 @@ void NRF24L01::AddError()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NRF24L01::OnIRQ(Pin pin, bool down, void* param)
|
void NRF24L01::OnIRQ(InputPort* port, bool down, void* param)
|
||||||
{
|
{
|
||||||
// 必须在down=true才能读取到正确的状态
|
// 必须在down=true才能读取到正确的状态
|
||||||
if(!down) return;
|
if(!down) return;
|
||||||
|
|
|
@ -616,7 +616,7 @@ void W5500::Register(byte Index, HardSocket* handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
// irq 中断处理部分
|
// irq 中断处理部分
|
||||||
void W5500::OnIRQ(Pin pin, bool down, void* param)
|
void W5500::OnIRQ(InputPort* port, bool down, void* param)
|
||||||
{
|
{
|
||||||
if(!down) return; // 低电平中断
|
if(!down) return; // 低电平中断
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// 中断脚回调
|
// 中断脚回调
|
||||||
static void OnIRQ(Pin pin, bool down, void* param);
|
static void OnIRQ(InputPort* port, bool down, void* param);
|
||||||
static void IRQTask(void* param);
|
static void IRQTask(void* param);
|
||||||
void OnIRQ();
|
void OnIRQ();
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ private:
|
||||||
static void ReceiveTask(void* param);
|
static void ReceiveTask(void* param);
|
||||||
uint _tidOpen;
|
uint _tidOpen;
|
||||||
uint _tidRecv;
|
uint _tidRecv;
|
||||||
static void OnIRQ(Pin pin, bool down, void* param);
|
static void OnIRQ(InputPort* port, bool down, void* param);
|
||||||
void OnIRQ();
|
void OnIRQ();
|
||||||
|
|
||||||
int _Lock; // 收发数据锁,确保同时只有一个对象使用
|
int _Lock; // 收发数据锁,确保同时只有一个对象使用
|
||||||
|
|
8
Port.cpp
8
Port.cpp
|
@ -510,15 +510,17 @@ void InputPort::OnPress(bool down)
|
||||||
if(down)
|
if(down)
|
||||||
{
|
{
|
||||||
if((Mode & Rising) == 0) return;
|
if((Mode & Rising) == 0) return;
|
||||||
|
_PressStart = Sys.Ms();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if((Mode & Falling) == 0) return;
|
if((Mode & Falling) == 0) return;
|
||||||
|
PressTime = Sys.Ms() - _PressStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(HardEvent)
|
if(HardEvent)
|
||||||
{
|
{
|
||||||
if(Handler) Handler(_Pin, down, Param);
|
if(Handler) Handler(this, down, Param);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -538,8 +540,8 @@ void InputPort::InputTask(void* param)
|
||||||
{
|
{
|
||||||
port->_Value = 0;
|
port->_Value = 0;
|
||||||
v &= port->Mode;
|
v &= port->Mode;
|
||||||
if(v & Rising) port->Handler(port->_Pin, true, port->Param);
|
if(v & Rising) port->Handler(port, true, port->Param);
|
||||||
if(v & Falling) port->Handler(port->_Pin, false, port->Param);
|
if(v & Falling) port->Handler(port, false, port->Param);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
19
Port.h
19
Port.h
|
@ -82,14 +82,19 @@ public:
|
||||||
|
|
||||||
// 整体写入所有包含的引脚
|
// 整体写入所有包含的引脚
|
||||||
void Write(bool value);
|
void Write(bool value);
|
||||||
void WriteGroup(ushort value); // 整组写入
|
// 整组写入
|
||||||
void Up(uint ms); // 拉高一段时间后拉低
|
void WriteGroup(ushort value);
|
||||||
void Blink(uint times, uint ms); // 闪烁多次
|
// 拉高一段时间后拉低
|
||||||
|
void Up(uint ms);
|
||||||
|
// 闪烁多次
|
||||||
|
void Blink(uint times, uint ms);
|
||||||
|
|
||||||
ushort ReadGroup(); // 整组读取
|
// 整组读取
|
||||||
|
ushort ReadGroup();
|
||||||
// 读取指定索引引脚。索引按照从小到大,0xFF表示任意脚为true则返回true
|
// 读取指定索引引脚。索引按照从小到大,0xFF表示任意脚为true则返回true
|
||||||
bool Read(byte index);
|
bool Read(byte index);
|
||||||
bool Read(); // Read() ReadReal() 的区别在 前者读输出 一个读输入 在开漏输出的时候有很大区别
|
// Read/ReadInput 的区别在于,前者读输出后者,读输入,在开漏输出的时候有很大区别
|
||||||
|
bool Read();
|
||||||
bool ReadInput();
|
bool ReadInput();
|
||||||
|
|
||||||
static bool Read(Pin pin);
|
static bool Read(Pin pin);
|
||||||
|
@ -150,7 +155,7 @@ public:
|
||||||
}Trigger;
|
}Trigger;
|
||||||
|
|
||||||
// 读取委托
|
// 读取委托
|
||||||
typedef void (*IOReadHandler)(Pin pin, bool down, void* param);
|
typedef void (*IOReadHandler)(InputPort* port, bool down, void* param);
|
||||||
|
|
||||||
ushort ShakeTime; // 抖动时间。毫秒
|
ushort ShakeTime; // 抖动时间。毫秒
|
||||||
PuPd Pull; // 上拉下拉电阻
|
PuPd Pull; // 上拉下拉电阻
|
||||||
|
@ -159,6 +164,7 @@ public:
|
||||||
bool Invert; // 是否倒置输入输出
|
bool Invert; // 是否倒置输入输出
|
||||||
|
|
||||||
bool HardEvent; // 是否使用硬件事件。默认false
|
bool HardEvent; // 是否使用硬件事件。默认false
|
||||||
|
ushort PressTime; // 长按时间
|
||||||
|
|
||||||
InputPort() : Port() { Init(); }
|
InputPort() : Port() { Init(); }
|
||||||
InputPort(Pin pin, bool floating = true, PuPd pull = UP) : Port()
|
InputPort(Pin pin, bool floating = true, PuPd pull = UP) : Port()
|
||||||
|
@ -194,6 +200,7 @@ private:
|
||||||
|
|
||||||
byte _Value;
|
byte _Value;
|
||||||
uint _taskInput; // 输入任务
|
uint _taskInput; // 输入任务
|
||||||
|
ulong _PressStart; // 开始按下时间
|
||||||
static void InputTask(void* param);
|
static void InputTask(void* param);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue