This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR2676:MSP430 CapTIvate -多点触控放大器;触摸保持支持

Guru**** 2589280 points
Other Parts Discussed in Thread: MSP430FR2676

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/914853/msp430fr2676-msp430-captivate---multi-touch-touch-hold-support

器件型号:MSP430FR2676

我正在我的项目上使用 MSP430FR2676、我的板上有两个可用按钮。 我想添加第三项功能、即按住其中一个按钮、或者检测两个按钮之间的多点触控。

我记得在 CapTIvate 设计指南中看到了多触控技术的支持、但我还没有找到有关如何实现它的更多文档。

我认为我看到了一些有关内置触摸保持支持的内容、但现在我不确定、因为我找不到任何有关该支持的信息。

如果有人能向我指出正确的方向、我将不胜感激。

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hallo Nichlas、

    请查看技术指南的"访问元素状态数据"部分、我认为这是您所需要的。

    您可以使用其中一个实现选项。

    例如       if ((BTN00.pCycle [0]->pElements[0]->bTouch == true)&&(BTN00.pCycle [0]->pElements[1]->bTouch == true))

    只需在 CAPT_appHandler()之后添加应用程序代码即可;
    或者一种很好的方法是使用回调函数 、请参阅此处

    请告诉我这是否有帮助

    此致

    Kostas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、我按照您的描述尝试了这种方法、我无法触发多触点事件。 它只读取一个按钮或另一个按钮、就像我在另一个按钮之前稍微触摸一个按钮。 我还尝试了以下操作、结果相同:

    if (((pSensor->bSensorTouch = true)&&(pSensor->bSensorPrevTouch = false))
       {
           //检测到触摸
     
           if (BTN00.pCycle [0]->pElements[0]->bTouch == true){              //如果按下按钮0 ...
               _DELAY_CYCLES (100);                                  
               if (BTN00.pCycle [0]->pElements[1]->bTouch == false){           //按钮1不是...
                   UPDATE_MSR (MSR_UP_BTN、1);                         //...向上按钮按压
               }否则,如果(BTN00.pCycle [0]->pElements[1]->bTouch == true){      //但如果按下按钮1 ...
                   UPDATE_MSR (MRS_皮 重、1);                           //…多点触控功能
               }
           }否则 if (BTN00.pCycle [0]->pElements[1]->bTouch == true ){        //如果按下按钮1 ...
               _DELAY_CYCLES (100);
               if (BTN00.pCycle [0]->pElements[0]->bTouch == false){          //按钮0不是...
                   UPDATE_MSR (MSR_RGT_BTN、1);                       //...按右按钮
               }否则、如果(BTN00.pCycle [0]->pElements[0]->bTouch =true){    //但如果按下按钮0 ...
                   UPDATE_MSR (MRS_皮 重、1);                          //… 多点触控功能
               }
           }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hallo Nichlas、

    它不能按您的预期工作、因为以下各行会检查传感器上是否有任何触控。

    if (((pSensor->bSensorTouch = true)&&(pSensor->bSensorPrevTouch = false))

    这意味着、如果检测到传感器的任何按钮发生触摸、并且之前的扫描没有触摸、则 IN 将进入回路并根据检测到的按钮激活 LED

    BTN00.pCycle [0]->pElements[0]->bTouch == true

    尝试一下、让我知道:

    if (((BTN00.pCycle [0]->pElements[0]->bTouch == true)&&(BTN00.pCycle [0]->pElements[1]->bTouch == true))
    {
    LED2_TOGGLE;//切换 LED2或仅更改为 LED2_ON
    LED1_TOGGLE;//切换 LED1
    }
    否则(((BTN00.pCycle [0]->pElements[0]->bTouch == true)&&(BTN00.pCycle [0]->pElements[1]->bTouch == false)))
    {
    LED2_OFF;
    LED1_ON;
    }
    否则(((BTN00.pCycle [0]->pElements[0]->bTouch == false)&&(BTN00.pCycle [0]->pElements[1]->bTouch == true)))
    {
    LED2_ON;
    LED1_OFF;
    }
    其他
    {
    LED1_OFF;
    LED2_OFF;
    }
    
    

    此致

    Kostas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、它现在似乎能够看到多点触控状态、但我遇到了一些非常严重的去抖问题。 这就是我在上面做触摸和之前的触摸陈述的原因。

    下面是我当前的回调函数:

    void keypadCallback (TSENSOR* pSensor)
           if ((BTN00.pCycle [0]->pElements[0]->bTouch == true)&&(BTN00.pCycle [0]->pElements[1]->bTouch == false)){            //如果按下向上按钮...
                   UPDATE_MSR (MSR_UP_BTN、1);  
           }否则、如果(((BTN00.pCycle [0]->pElements[1]->bTouch == true)&(BTN00.pCycle [0]->pElements[0]-> bTouch == false)){ //如果按下了右键...
                   UPDATE_MSR (MSR_RGT_BTN、1);
           }否则、如果(((BTN00.pCycle [0]->pElements[0]->bTouch = true)&(BTN00.pCycle [0]->pElements[1]->bTouch = true)){  //如果按下了两个按钮...
                   UPDATE_MSR (MRS_皮 重、1);
           }
           tWAK_ON;              //将 tWAKE 引脚设置为高电平- 4000应该= 4msec、但在示波器上为双(8msec)
           __DELAY_CYCLLES (10);    //浪费一些时间-延迟基于默认为1MHz 的 MCLK (对于我们的设计而言)
           tWAK_OFF;             //将 tWAKE 引脚设置为低电平
    感谢您的帮助、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很遗憾听到帽子。 让我们尝试找到解决该问题的方法。

    是否可以向我发送 UserConfig.c 和.h 文件?

    是否使用 GUI 生成了代码? 是否对设置进行了其他修改?

    您看到的问题是什么。

    谢谢

    此致

    Kostas