打印

PSOC4触摸按键疑问

[复制链接]
2145|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shenyoutx|  楼主 | 2015-4-7 22:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
psoc4 capsense中有两个函数SetBaselineData()和WriteSensorRaw()  我想利用这两个函数实现以下功能
扫描sensor 50次 然后求出  baseline和rawcount的平均值,然后利用[size=14.3999996185303px]函数SetBaselineData()和WriteSensorRaw()将baseline和rawcount的值写入到传感器阵列中 (并不利用baseline和rawcount来计算diff),让系统判断传感器的开关状态,并考虑迟滞和手指阈值,我有以下疑问 望解答
[size=14.3999996185303px]

[size=14.3999996185303px]1,api中并没有说调用[size=14.3999996185303px]SetBaselineData()和[size=14.3999996185303px]WriteSensorRaw()会更新CapSense_sensorOnMask[]阵列,所以我就不知道在什么情况下,可以使用这两个函数。
2. psoc4 按键感应   在调试时会发现,当按下一个按键是,在去按下另外一个按键 ,之前的按键的rawcount值会增大,松开后按的按键(先按的不松开),这是会发现,先按下去的按键的rawcount不能回归到单独按下时的rawcount ,出现这种情况可能有哪些原因。

沙发
西乌拉| | 2015-4-14 17:19 | 只看该作者
楼主,想请教你如何实现触摸按键控制LED灯的颜色,我是初学者,一直找不到读取按键输入的函数。

使用特权

评论回复
板凳
shenyoutx|  楼主 | 2015-5-8 21:11 | 只看该作者
西乌拉 发表于 2015-4-14 17:19
楼主,想请教你如何实现触摸按键控制LED灯的颜色,我是初学者,一直找不到读取按键输入的函数。 ...

//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------

#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules
#include "delay.h"
#define BEEP_ON PRT5DR |=0X02
#define BEEP_OFF PRT5DR &=0XFD;
BYTE Speed[]=
{
        0,0,0,0,0,0
};
BYTE Resolution[]=
{
        14,14,14,14,14,14
};
BYTE RefValue[]=
{
        2,2,2,2,2,2
};
//98,98,105,84,90,78
BYTE FingerThreshold[]=
{
        93,93,100,79,85,70
};
BYTE SensorMap[]=
{
        0x01,0x02,0x04,0x08,0x10,0x20
};
BYTE SensorSta;
struct I2C_REG
{
        WORD RawCount[6];
        WORD BaseLine[6];
        BYTE Sta;
}my_i2c;
void ScanAndLightLED(void );
void Led_Init(void );
void BEEP(void );
void main(void)
{
        BYTE i;
        M8C_EnableGInt;
        EzI2Cs_SetRamBuffer(sizeof (my_i2c),0,(BYTE *)(&my_i2c));
        EzI2Cs_Start();
        Led_Init();
        LED7_On();
        CSD_Start();
        for (i=0;i<6;i++)
        {
                CSD_SetRefValue(RefValue);
                CSD_SetScanMode(Speed,Resolution);
                CSD_baBtnFThreshold=FingerThreshold;
                CSD_InitializeSensorBaseline(i);
        }
        while (1)
        {
                for (i=0;i<6;i++)
                {
                        CSD_SetRefValue(RefValue);
                        CSD_SetScanMode(Speed,Resolution);
                        CSD_ScanSensor(i);
                }
                CSD_UpdateAllBaselines();
                if (CSD_bIsAnySensorActive())
                {
                        SensorSta=CSD_baSnsOnMask[0];
                        ScanAndLightLED();
                }
                //#ifdef DEBUG
                my_i2c.Sta=CSD_baSnsOnMask[0];
                for (i=0;i<6;i++)
                {
                        my_i2c.BaseLine=CSD_waSnsBaseline;
                        my_i2c.RawCount=CSD_waSnsResult;
                }
                //#endif
               
               
                //ScanAndLightLED();
               
        }
}
void Led_Init(void )
{
        LED1_Start();
        LED2_Start();
        LED3_Start();
        LED4_Start();
        LED5_Start();
        LED6_Start();
        LED7_Start();
}

void ScanAndLightLED(void)
{
        static BYTE Step=0;
        switch (Step)
        {
                case 0:if (SensorSta==SensorMap[Step]){ LED1_On(); Step++;}break;
                case 1:if (SensorSta==SensorMap[Step]){ LED2_On(); Step++;}break;
                case 2:if (SensorSta==SensorMap[Step]){ LED3_On(); Step++;}break;
                case 3:if (SensorSta==SensorMap[Step]){ LED4_On(); Step++;}break;
                case 4:if (SensorSta==SensorMap[Step]){ LED5_On(); Step++;}break;
                case 5:if (SensorSta==SensorMap[Step]){ LED6_On();}break;
        }
       
}
void BEEP(void )
{
        BEEP_ON;
        Delay50uTimes(6);
        BEEP_OFF;
        Delay50uTimes(6);
        BEEP_ON;
        Delay50uTimes(6);
        BEEP_OFF;
        Delay50uTimes(6);
        BEEP_ON;
        Delay50uTimes(6);
        BEEP_OFF;
        Delay50uTimes(6);
       
}

你可以按照这个改一下,经验有限,也是摸索着前进。刚接触不久。

使用特权

评论回复
地板
yzbert| | 2015-5-12 17:32 | 只看该作者
楼主 我们是专门做触摸IC的,有需要可以加下我,提供技术支持:lol

使用特权

评论回复
5
dsll2010| | 2015-5-14 17:26 | 只看该作者
第一个问题,你想手动写入RawCnt和Baseline吗?请仔细理解一下CapSense的原理,你的这个需求可能是没有必要的。
第二个问题,请考虑你的两个按键的间距,走线是否会相互影响。另外,如果上升的RawCount不影响触发判断,就没有问题。

使用特权

评论回复
6
sanxinweiabc| | 2015-5-16 16:27 | 只看该作者
请仔细理解一下CapSense的原理,你的这个需求可能是没有必要的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

1

粉丝