开源改变世界!!

Req 去抖示例 #53

推推 grbl 2年前 (2023-02-08) 155次浏览
关闭
5ocworkshop 开了这个issue 2021 年 8 月 5 日 · 7条评论
关闭

Req 去抖示例#53

5ocworkshop 开了这个issue 2021 年 8 月 5 日 · 7条评论

评论

Req 去抖示例 #53
5oc工作坊 评论了 2021 年 8 月 5 日  

我有一个关于hal.port.wait_on_input功能使用的快速问题。

我有一个连接到 Aux_In0 的开关,按下时将信号引脚连接到地。当等待模式为“0”/立即时,该功能正常工作,但我无法让任何其他条件工作。理想情况下,我想在低位或下降时触发,但如果我使用它们,电路板将变得无法访问。

您能否确认正确的语法以使用该函数读取在下降或低触发条件下具有去抖功能的瞬时按钮?

谢谢,

 if (hal.port.wait_on_input(1, 0, 0, 0)) {
        if (inspection_light_on == 0) {
        inspection_light_on = 1;
        }
        else {
            inspection_light_on = 0;
        }
    }

我可以自己写一些去抖动,但似乎该功能的目的已经是提供一些去抖动过滤了?

谢谢。

Req 去抖示例 #53
贡献者

哪个驱动版本?请张贴$I回复。

wait_on_input()用于除立即模式以外的任何其他模式时,必须提供合理的超时。如果wait_on_input()超时返回-1,您将必须对此进行测试。

在插件代码中,您可以考虑注册一个中断处理程序,最近已将对此的支持添加到许多驱动程序中。如果支持注册,则函数指针不为零。

请注意,没有对辅助输入执行去抖动。

Req 去抖示例 #53
作者

[VER:1.1f.20210629:]
[OPT:VNMZHS2,35,1024,3,0]
[NEWOPT:ENUMS,RT+,HOME,ES,TC]
[FIRMWARE:grblHAL]
[NVS STORAGE:*FRAM]
[DRIVER: iMXRT1062]
[驱动程序版本:210703]
[驱动程序选项:USB.2]
[电路板:GRBLHAL2000 – PRINTNC]
[AUX IO:4,0,0,0]
[插件:RGB 指示灯 v0.4]

啊,所以不管用什么方法,我都需要实现去抖动,这就是我需要知道的。

Req 去抖示例 #53
贡献者

理想情况下,我想在低位或下降时触发,但如果我使用它们,电路板将变得无法访问。

它在等待期间崩溃或挂起?wait_on_input()超时 > 0 阻塞,直到事件或超时到期。

啊,所以我需要实现 debounce 不管方法

是的,如果你真的需要去抖。目前最好的方法是注册一个中断处理程序,当被调用时注销它并延迟,然后以立即模式读取输入(并采取必要的操作)并重新注册处理程序。您还可以设置一个标志而不是注销/重新注册,这将忽略对处理程序的进一步调用和/或检查实时处理程序中的输入(您订阅on_execute_realtime事件的 IIRC)。

不应在中断处理程序中执行延迟(或任何需要很长时间处理的代码),而是使用protocol_enqueue_rt_command()注册要从前台进程执行(一次)的函数。

Req 去抖示例 #53
作者

太好了谢谢。很有帮助。

Req 去抖示例 #53

我想通过行程警报线为我的对刀仪添加一个辅助输入。我一直没能在任何其他插件中找到辅助输入用于此类信号的示例,您能举个例子吗?如果此信号被触发,我想断言 ALARM/ESTOP。

Req 去抖示例 #53
贡献者
terjeio 评论了 2021 年 10 月 22 日  

如果您为输入引脚注册了一个中断处理程序,则在断言时设置相关信号并调用hal.control.interrupt_callback

如果您希望状态报告显示正确的状态,请将您的代码挂钩到hal.control.get_state中。首先保存原始的 fn 指针(例如,get_state_org如下例所示)。

在您的替换中,阅读原始状态并“或”输入原始状态。

control_signals_t get state (void):
{
    control_signals_t signals = get_state_org();

    signals.e_stop |= (hal.port.wait_on_input(true, <port>, WaitMode_Immediate, 0.0f)  == 1);

    return signals;
}

<port> 是您要使用的端口 ID。

蓝牙插件使用辅助输入引脚中断,可以作为如何执行此操作的示例。

Req 去抖示例 #53

泰耶,

我能够通过在循环期间简单地检查引脚来解决我的情况,因为我想要做的就是在按下按钮时打开灯。它不需要中断级别的紧急性,它只是为了提高可见性,我在使用它时没有感觉到任何延迟。

它将出现在 RGB 插件的待更新日期中。