UBAINS

 找回密码
 立即注册
搜索
热搜: UBAINS
查看: 4223|回复: 0

[程序方法] UBAINS KP系列面板使用和编程指导说明

[复制链接]

10

主题

11

帖子

447

积分

版主

Rank: 7Rank: 7Rank: 7

积分
447
QQ
发表于 2020-12-7 16:04:48 | 显示全部楼层 |阅读模式
本帖最后由 pidtfork 于 2020-12-7 16:06 编辑


UBAINS编辑器软件包含了KP面板模板

基本功能直接使用面板的模板程序就可以满足要求,近期有客户反馈需要防误触控,例如要长按或者双击这样的功能

虽然这些功能内部都使用过但是以前做的比较逻辑比较复杂,

所以重新写一了一个方法来简化一下操作

面板的配置可以参考面板说明,里面包含了ID设置/面板模式配置/背光指示灯控制

setWpTouch 和 setWpRelease 方法为模板程序中的方法,返回按钮按下弹起事件
将事件传入 KPxEvent 对象 的回调函数返回 点击/双击/长按事件


  1. /*********************************按钮面板***********************************
  2. setBusOpen();为打开面板控制功能。
  3. function setWpTouch(vAddress,vButtonNum)为面板按键按下去的触发事件
  4. function setWpRelease(vAddress,vButtonNum)为面板按键松开时的触发事件
  5. vAddress为面板地址,可识别不同地址面板。
  6. vButtonNum为面板触发的第几个按键。
  7. doBusButtonAction('sWpPanelPush1');为调用页面按钮为sWpPanelPush1的事件。
  8. sWpPanelPush1为按钮的Name,更改Name需对应更改代码。
  9. 事件可填到对应的按键事件里面,也可以直接写在下面的语句。
  10. setWpLedOn(vAddress,vButtonNum);为控制地址面板,第几个按键的灯亮。
  11. setWpLedOff(vAddress,vButtonNum);为控制地址面板,第几个按键的灯灭。
  12. setWpLedOne(vAddress,vButtonNum);为控制地址面板,第几个按键的灯亮,其它灯全灭。
  13. 如:setWpLedOn(2,1);把地址为2的面板,按键1的灯打开。
  14. 注:
  15.    多个面板直接在触发事件中判断vAddress地址,实现不同面板功能,不可导入多个模版
  16.    一个完程序的程序,setWpTouch,setWpRelease方法只能出现一次
  17. *****************************************************************************/



  18. setBusOpen();
  19. function setWpTouch(vAddress,vButtonNum)
  20. {
  21.     kp6.touch(vButtonNum);
  22.         switch(vButtonNum)
  23.         {
  24.             case 1:
  25.                
  26.                 break;
  27.             case 2:
  28.                
  29.                 break;
  30.             case 3:
  31.                
  32.                 break;
  33.             case 4:
  34.                
  35.                 break;
  36.             case 5:
  37.                
  38.                 break;
  39.             case 6:
  40.                
  41.                 break;
  42.         }
  43.         setWpLedOne(vAddress,vButtonNum);
  44.    
  45.    
  46. }
  47. function setWpRelease(vAddress,vButtonNum)
  48. {
  49.     kp6.release(vButtonNum);
  50.     switch(vButtonNum)
  51.     {
  52.         case 1:
  53.             doBusButtonAction('sWpPanelRelease1');
  54.             break;
  55.         case 2:
  56.             doBusButtonAction('sWpPanelRelease2');
  57.             break;
  58.         case 3:
  59.             doBusButtonAction('sWpPanelRelease3');
  60.             break;
  61.         case 4:
  62.             doBusButtonAction('sWpPanelRelease4');
  63.             break;
  64.         case 5:
  65.             doBusButtonAction('sWpPanelRelease5');
  66.             break;
  67.         case 6:
  68.             doBusButtonAction('sWpPanelRelease6');
  69.             break;
  70.     }
  71. }









  72. function KPxEvent(callback) {
  73.     this.callback = callback;
  74.     this.clickTime = 1000; //1s
  75.     this.doubleClickTime = 1200; //1.2s
  76.     this.list = [];
  77.     this.record = function(value) {
  78.         this.list.push(value);
  79.         if (this.list.length > 32) {
  80.             this.list.shift();
  81.         }
  82.     }
  83.     this.getRecord = function(keyNum,type,index){
  84.         var last;
  85.         if (index == undefined) {
  86.             last = this.list.length - 1;
  87.         }else{
  88.             last = index;
  89.         }
  90.         for (var i = last; i >= 0; i--){
  91.             if (this.list[i].id == keyNum && this.list[i].type == type) {
  92.                 return {
  93.                     id:this.list[i].id,
  94.                     type:this.list[i].type,
  95.                     time:this.list[i].time,
  96.                     index:i
  97.                 };
  98.             }
  99.         }
  100.         return -1;
  101.     }
  102.     this.touch = function(keyNum) {
  103.         this.record({
  104.             id:keyNum,
  105.             type:"touch",
  106.             time:new Date().getTime(),
  107.         });
  108.     }
  109.     this.release = function(keyNum) {
  110.         this.record({
  111.             id:keyNum,
  112.             type:"release",
  113.             time:new Date().getTime(),
  114.         });
  115.         this.check(keyNum);
  116.     }
  117.     this.check = function(keyNum){
  118.         var find = this.clickCheck(keyNum);
  119.         if (find) {
  120.             if (find.click) {
  121.                 this.callback("click",keyNum,find.times);
  122.                 this.doubleCheck(keyNum,find);
  123.             }
  124.             if (find.hold) {
  125.                 this.callback("hold",keyNum,find.times);
  126.             }
  127.         }
  128.     }
  129.     this.clickCheck = function(keyNum,index) {
  130.         var last;
  131.         if (index == undefined) {
  132.             last = this.list.length - 1;
  133.         }else{
  134.             last = index;
  135.         }        
  136.         var release = this.getRecord(keyNum,"release",last);
  137.         if (release) {
  138.             var touch = this.getRecord(keyNum,"touch",release.index);
  139.             if (typeof release == typeof touch) {
  140.                 var times = release.time - touch.time;
  141.                 var clickEnable = times < this.clickTime ? true:false;
  142.                 var holdEnable = times > this.clickTime ? true:false;
  143.                 return {
  144.                     click:clickEnable,
  145.                     hold:holdEnable,
  146.                     times : times,
  147.                     id : keyNum,
  148.                     touchTime : touch.time,
  149.                     releaseTime : release.time,
  150.                     touchIndex : touch.index,
  151.                     releaseIndex : release.index,
  152.                 }
  153.             }
  154.         }
  155.         return -1;
  156.     }
  157.     this.doubleCheck = function(keyNum,lastInfo){
  158.         var index = lastInfo.touchIndex;
  159.         var prev = this.clickCheck(keyNum,index);
  160.         if (prev) {
  161.             if (prev.click) {
  162.                 var times = lastInfo.releaseTime - prev.touchTime;
  163.                 if (times < this.doubleClickTime) {
  164.                     this.callback("doubleClick",keyNum,times);
  165.                 }
  166.             }
  167.         }
  168.     }
  169. }



  170. var kp6 = new KPxEvent(function(event,id,times) {
  171.     setButtonText("AAAAA",event + " : " + id + " : " + times);

  172.     // event 取值为 click  doubleClick  hold 分别表示单击 双击 长按
  173.     // id 表示按键值
  174.     // times 表示此次事件持续时间 不同时间长度的长按事件可以根据此值进一步判断

  175. });

  176. //下面两个参数为默认值 可根据需求更改 单位为ms
  177. //kp6.clickTime = 1000;       //设置点击事件为1s 短于1s为点击 长于1s为长按
  178. //kp6.doubleClickTime = 1200; //设定双击事件时间,两次点击事件总时间少于1.2s为双击事件




复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

Archiver|手机版|小黑屋|BBS.UBAINSYUN.COM

GMT+8, 2024-4-25 06:09 , Processed in 0.035962 second(s), 20 queries .

Powered by UBAINS! X3.4

© 2001-2017 UBAINS Inc.

快速回复 返回顶部 返回列表