现在按键一按就几个灯一起亮,这样怎么办呢?
如题,我不知道我的通道是否有错,用的是tinny88,和IAR5.20的新版本,希望各位帮我看一下,哪有问题,主程序如下:__task void main( void )
{
/* initialise host app, pins, watchdog, etc */
init_system();
/* enable sensor 0: a rotor on channels 0..3 sensor 0 */
qt_enable_rotor( CHANNEL_0, CHANNEL_3, NO_AKS_GROUP, 16u, HYST_6_25, RES_8_BIT, 3u);
/* enable sensors 1..4: keys on channels 4..7 respectively */
qt_enable_key( CHANNEL_4, AKS_GROUP_1, 10u, HYST_6_25 ); //sensor 1
qt_enable_key( CHANNEL_5, AKS_GROUP_2, 10u, HYST_6_25 ); //sensor 2
qt_enable_key( CHANNEL_6, AKS_GROUP_3, 10u, HYST_6_25 ); //sensor 3
qt_enable_key( CHANNEL_7, AKS_GROUP_4, 10u, HYST_6_25 ); //sensor 4
/* initialise touch sensing */
qt_init_sensing();
/* configure timer ISR to fire regularly */
init_timer_isr();
/* configure the debug data reported to the PC */
board_info.qt_max_num_rotors_sliders_board_id = ( ( QT_MAX_NUM_ROTORS_SLIDERS << 4 ) | EVK2080B );
board_info.qt_num_channels = QT_NUM_CHANNELS;
sensor_config = SENSOR_CONFIG( CHANNEL_0, CHANNEL_3, SENSOR_TYPE_ROTOR );
sensor_config = SENSOR_CONFIG( CHANNEL_4, CHANNEL_4, SENSOR_TYPE_KEY );
sensor_config = SENSOR_CONFIG( CHANNEL_5, CHANNEL_5, SENSOR_TYPE_KEY );
sensor_config = SENSOR_CONFIG( CHANNEL_6, CHANNEL_6, SENSOR_TYPE_KEY );
sensor_config = SENSOR_CONFIG( CHANNEL_7, CHANNEL_7, SENSOR_TYPE_KEY );
sensor_config = SENSOR_CONFIG( CHANNEL_0, CHANNEL_0, SENSOR_TYPE_UNASSIGNED );
sensor_config = SENSOR_CONFIG( CHANNEL_0, CHANNEL_0, SENSOR_TYPE_UNASSIGNED );
sensor_config = SENSOR_CONFIG( CHANNEL_0, CHANNEL_0, SENSOR_TYPE_UNASSIGNED );
/* enable interrupts */
__enable_interrupt();
/* loop forever */
for( ; ; )
{
/* test flag: is it time to measure touch? */
if( time_to_measure_touch )
{
/* clear flag: it's time to measure touch */
time_to_measure_touch = 0u;
/* measure touch sensors */
qt_measure_sensors( current_time_ms );
/* report debug data to host */
report_debug_data();
}
/*检测key4.1*/
if (qt_touch_status.sensor_states & CHANNEL_4)
{
PORTD_Bit4 = 1;
}
else
{
PORTD_Bit4 = 0;
}
/*检测key3.1*/
if (qt_touch_status.sensor_states & CHANNEL_5)
{
PORTA_Bit2 = 1;
}
else
{
PORTA_Bit2 = 0;
}
/*检测key2.1*/
if (qt_touch_status.sensor_states & CHANNEL_6)
{
PORTD_Bit5 = 1;
}
else
{
PORTD_Bit5 = 0;
}
/*检测key1.1*/
if (qt_touch_status.sensor_states & CHANNEL_7)
{
PORTB_Bit7 = 1;
}
else
{
PORTB_Bit7 = 0;
}
}
} 怎么没有人呢?帮忙看看,我是新手,不懂呀!!各位帮帮忙啊! if ((qt_touch_status.sensor_states & CHANNEL_4) 中不能用CHANNEL_4,而应该把它改成0x01,其它的应该为0x02,0x04,0x08。还有,如果你希望4个键之间不互相干扰,应该在enable_key函数中把它们设置为相同的group。希望对你有帮助。 非常感谢,我试试 还是不行呀!换成01、02、04、08之后,跟原来一样,那个对于通道的管脚,需要设置吗?我用的是PB0-PB3四个口,需要设置他们的输入输出吗? 让我再想想啊
1、如果你没有用到滑条,只是4个按键,那么这句话可以删掉qt_enable_rotor( CHANNEL_0, CHANNEL_3, NO_AKS_GROUP, 16u, HYST_6_25, RES_8_BIT, 3u);
2、在删掉了上面的那句话后,把 qt_enable_key( CHANNEL_4, AKS_GROUP_1, 10u, HYST_6_25 );里的CHANNEL_4改成CHANNEL_0,其它三组类似地改成CHANNEL_1~CHANNEL_3
3然后在确认楼上我说的“01、02、04、08”改动已经实施。
输入输出不用设置。按照例子程序的默认设置就可以。我用了这个库,只带了一个按键,没有问题的。多多交流吧,我也是才接触这个玩艺没多久,现在还在被灵敏度的问题困扰着,呵呵。
希望有帮助。 谢谢,十分感谢,基本解决了,还有一点小干扰,我再调调。 你的灵敏度咋样?我想达到手还没碰到板子就能检测到的结果,但一直很不理想。我想用这个做个类似接近开关的东西。 这个不知道,我这个就是四个按键,按上灯亮就行了,论坛里不是说,可以调节qt_enable_key( CHANNEL_4, AKS_GROUP_1, 10u, HYST_6_25 ); 这个语句中10u的大小来进行吗?你试试吧 你有没有这种情况,就是正面不怎么好用,但是反面很敏感。 程序我没有细看,不知道有没有软件抗干扰。 把门限的10改为30或40看看。 那个门限是越大越敏感吗? 调试这个,是通过调试current_time_ms 的大小,来完成吗? 那个threshold是越大越敏感啊?!,我的样板已经封到了机器里,拿不出来了。tingsi,你能试一下看看吗?要不我从10调到2都没什么变化呢。我的正反面区别不是太大,都是手指碰上才能有反应。 不能呀!我也就是问问,我从10调到30后,根本就没有反应了,还有你的current_time_ms是多大呀?这个有什么用呀? 我试了一下,调到3基本上就可以提前触发了 谢谢,看来不同板子对threshold的要求还是不一样的,我可能要重新layout一下了。
current_time_ms感觉是库函数里用来校准漂移用的,也就是说,一段时间后,它要根据环境(温度?湿度?电场?)的变化重新校准检测中的一些参数什么的。这个值不需要很准确,我感觉。 current_time_ms一定要填写当前的客观毫秒数……别乱填写……这是整个系统的时间标尺…… 哦,那还是如实赋值吧 谢谢各位的指导,current_time_ms我赋的是感应电容高脉冲的时间与中断的时间,可以自动更新的,效果还不错,应该是这样的吧 【20楼】 tingsi
给一个一直累加的毫秒计数器就可以了……和你说的XXXX时间,貌似米太大关系…… 又有一个问题了,我用的是PB0到PB3四个口,我要控制8个按键,所以我用跳线进行了选择,分别把每四个键连在了PD0和PD1上,这样能实现八个键分别控制八个灯亮,而不互相干扰吗? 各位大哥,帮帮忙呀! 我感觉QTouch2.0的滑条和滚轮的库有bug,至少对于部分芯片是这样的,整体而言,处理得也不甚严谨。 现在出QTouchLib3.0了,不知道有没大大改进,可以在哪下载到??
页:
[1]