• Qt串口通信——功能实现:PC对LPC的音量控制


    设计方案1:

    在PC上,当使用QDial调节音量时,触发QDial的SIGNAL:ValueChange(),对应SLOT向LPC发送自定义键码0x22;

    在LPC上,当接收到0x22键码时,执行操作:设置当前volume值,当设置完成后,PC将接收到来自LPC的volume数据进行更新。

    发现问题:

    1、当触发ValueChange()信号时,由于LPC设置3s无活动自动进入音量显示界面,PC每隔3s仍发送0x22键码,导致VFD一直显示0x22键码,其他按键可以正常使用,但是操作执行完成后依然进入0x22的显示界面且每隔3s闪烁一次(原因应该是显示了volume界面但马上又被0x22刷新)。

    2、发送的数据只有一个Byte可以搭载数据,搭载命令数据之后就无法搭载音量数据,改写协议又相对麻烦。

    3、由于显示0x22也是其中一个功能码操作,在LPC中设置了3秒延时,因此才会有问题1的问题。必须关掉对0x22键码设置延时。

    设计方案2:

    设置一个Volume的镜像变量Volume_2(Volume_2设为全局变量),QDial获取Volume_2的值并与当前值做判断,得出方向后发送Volume+(ADKey5)和Volume-(ADKey6)的信号给LPC,直接执行加减操作。

    发现问题:

    1、用QDial控件的触发信号ValueChange()会导致音量一直为零,原因是在发生Value的变触发发送改变音量的函数,导致音量持续改变;

    2、用release()做触发信号在数值改变的过程中LPC不响应,每次不论将数值调整为多少,都只做一次改变。

    3、底部用于显示音量的Label无ValueChange的触发信号。

    解决办法:

    去掉Lbl控件,改用SpinBox并与QDial建立信号-槽关系,将spinbox的button隐藏(看起来就和Label一样了),用spinbox的valuechange作为触发信号。这样可以保证value随QDial实时改变,问题基本解决,但效果不太理想。由于使用循环,在实时改变数值的时候每改变一个单位都要计算一次差值,导致出现明显抖动。尚无解决办法。

    注意:

    1、在进行功能实现时,尽量避免使用全局变量,减少移植难度和空间占用;

    2、不可改写现有通信协议。 

    本博客为作者原创,转载请注明出处。
  • 相关阅读:
    【带权并查集】How Many Answers Are Wrong HDU
    【带权并查集+离散化】Parity game POJ
    【并查集】Supermarket POJ
    【并查集】P3958 奶酪
    【并查集-判环】Is It A Tree? POJ
    【最短路/线性差分约束】Layout POJ
    【最短路-负环】Extended Traffic LightOJ
    【最短路】Subway POJ
    【最短路-判负环 Floyd】Wormholes POJ
    [JZOJ]1293.气象牛[区间DP]
  • 原文地址:https://www.cnblogs.com/shawn06/p/6252568.html
Copyright © 2020-2023  润新知