打印
[IDE]

【CH32F103测评报告】+ADC采集识别触摸按键状态

[复制链接]
3327|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请开发板#今天试了下板子上touchkey的实验。

起初我以为会像ST那样专门做出一个什么触摸库的。
打开程序,发现程序非常简单,就是ADC单通道采集的一个例程。

串口一直打印出当前选中ADC通道的原始值。显然不是很实用。
发现在引脚无输入,即未触摸时,输出数值为1700左右;在有输入
即触摸时(稳定接触),输出数值480左右,受触摸的力道和时间的长短
有轻微差异,整体范围在480~700左右。实验很简单,稍微对它修改下,
让它有一些实际的作用或者趣味。
下面我们对程序进行稍微修改,让它不要一直发送数据。当触摸按键状态
变化时,才会输出当前ADC值和按键状态。为了更好观察,我们定义一个
引脚PA0控制板上的LED灯。当触摸时,灯亮,离开时,灯灭。
下面对程序进行修改:
在main.c里面直接修改:
添加LED初始化
void LED_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
}

在main函数里面修改输出逻辑:
int main(void)
{
        u16 ADC_val=0;
        u16 ADC_Oldval=0;

        Delay_Init();
        LED_Init();
        USART_Printf_Init(115200);
        printf("SystemClk:%d
",SystemCoreClock);

        Adc_Init();

        while(1)
        {
                ADC_val = Get_Adc_Average( ADC_Channel_2, 10 );  //Channel 2
                //无触摸时 1747
                //有触摸时 400~700  稳定按住480左右
                if(abs(ADC_val-ADC_Oldval)>800)
                {
                        printf( "NowTouchKey:%04d
", ADC_val );
                        printf( "OldTouchKey:%04d
", ADC_Oldval );
                        //手触摸上去ADC分压变小
                        if(ADC_val-ADC_Oldval>800)//由小变大
                        {
                                printf("You leave the key!
");
                                PAout(0)=1;//按住状态指示灯 关灯
                        }
                        else//由大变小
                        {
                                printf("You touch the key!
");
                                PAout(0)=0;//按住状态指示灯 开灯
                        }
                }
                ADC_Oldval=ADC_val;

                Delay_Ms(200);
        }
}

编译下载,观察现象:

当只有触摸按键切换状态时,才会输出,并且LED的状态也会跟随改变。
如果把while里面的代码放到一个定时器里面,定时刷新,那么一个简易的
触摸按键就可以用了。
另外这种方法也可用来检测水位的限位。

今天试验比较简单,就到这了。





使用特权

评论回复

相关帖子

沙发
zeshoufx| | 2020-9-25 19:14 | 只看该作者
谢谢分享【ADC采集识别触摸按键状态】

使用特权

评论回复
板凳
51xlf| | 2020-10-7 16:12 | 只看该作者
有电路图吗   

使用特权

评论回复
地板
i1mcu| | 2020-10-7 16:12 | 只看该作者
         

使用特权

评论回复
5
pmp| | 2020-10-7 16:12 | 只看该作者
ADC采集是什么原理图呢   

使用特权

评论回复
6
mmbs| | 2020-10-7 16:13 | 只看该作者
触摸之后会有高电平信号?  

使用特权

评论回复
7
1988020566| | 2020-10-7 16:13 | 只看该作者
AD按键采集的原理是什么

使用特权

评论回复
8
lzbf| | 2020-10-7 16:13 | 只看该作者
普通单片机怎样做电容式触摸感应按键

使用特权

评论回复
9
youtome| | 2020-10-7 16:14 | 只看该作者
触摸按键隔着五毫米的玻璃能识别吗?

使用特权

评论回复
10
cemaj| | 2020-10-7 16:14 | 只看该作者
多个电容触摸按键,如何设计?  

使用特权

评论回复
11
updownq| | 2020-10-7 16:14 | 只看该作者
触摸按键是如何工作的?  

使用特权

评论回复
12
sanfuzi| | 2020-10-7 16:15 | 只看该作者
单片机带有AD采样的就可以   

使用特权

评论回复
13
1988020566| | 2020-10-7 16:15 | 只看该作者
任何两个导电的物体之间都存在着感应电容  

使用特权

评论回复
14
mmbs| | 2020-10-7 16:15 | 只看该作者
触摸之后会有高电平信号,可以使用IO吗?   

使用特权

评论回复
15
updownq| | 2020-10-7 16:15 | 只看该作者
做电容触摸按键,如何写松手检测?

使用特权

评论回复
16
cemaj| | 2020-10-7 16:15 | 只看该作者
用电阻屏做还是怎么做

使用特权

评论回复
17
sanfuzi| | 2020-10-7 16:16 | 只看该作者
            

使用特权

评论回复
18
youtome| | 2020-10-7 16:16 | 只看该作者
触摸式按键和感应式按键有什么不同

使用特权

评论回复
19
lzbf| | 2020-10-7 16:16 | 只看该作者
单片机识别触摸板轨迹  

使用特权

评论回复
20
i1mcu| | 2020-10-7 16:16 | 只看该作者
谢谢楼主分享的。     

使用特权

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

本版积分规则

111

主题

627

帖子

2

粉丝