按键与LED灯

描述:通过按键控制LED灯

ADC按键设备树配置

ADC按键是通过ADC采样实现。通过对采样值设定,根据采集电压的不同,设置不同按键事件。

DTS配置示例如下:
以下是使用adc0通道

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*************************	按键	*********************/

adc_vin0_keys: adc-vin0-keys {
status = "okay";
compatible = "adc-keys";
io-channels = <&saradc 0>;
io-channel-names = "buttons";
poll-interval = <100>;
keyup-threshold-microvolt = <1800000>;


left-key {
// 键值,取自定义键值表里的值
linux,code = <KEY_LEFT>;
label = "left";
// 按键 按下时电压
press-threshold-microvolt = <0>;
};
right-key {
linux,code = <KEY_RIGHT>;
label = "right";
press-threshold-microvolt = <415000>;
};
up-key {
linux,code = <KEY_UP>;
label = "up";
press-threshold-microvolt = <800000>;
};
down-key {
linux,code = <KEY_DOWN>;
label = "down";
press-threshold-microvolt = <1200000>;
};



};

adc 字段解释:
compatible :用来匹配驱动程序
io-channels : 通道号
poll-interval:轮询间隔
keyup-threshold-microvolt:按键弹开后的电压

按键字段解释:
linux,code :对应按键键值,需要与系统键值对应
label:标签
press-threshold-microvolt:采样时的电压

电压计算值,需要根据实际电路进行计算,值为采样点的电压
例如:

adc通道外侧连接了一个10k电阻,通道电压最高为1.8v,计算采样值时需要结合计算。示例:
left电压= 0 ,因为100欧较小
right电压= 3/(10+3) *1.8 =0.415
up电压=(3+5.1)/(10+3+5.1)=0.805

LED灯设备树配置示例

指示灯仅需要配置gpio引脚就行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*************************	指示灯	*********************/

leds: gpio-leds {
status = "okay";
compatible = "gpio-leds";

working-led {
gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>;
label = "working-led";
default-state = "off";
};
chg-led {
gpios = <&gpio1 RK_PB1 GPIO_ACTIVE_HIGH>;
label = "chg-led";
default-state = "off";
};
key_backlight {
gpios = <&gpio4 RK_PD2 GPIO_ACTIVE_HIGH>;
label = "key_backligh";
default-state = "off";
};
};

设备树配置其他解析

compatible:
匹配对应驱动代码

io-channels:
对应的通道,根据原理图配置

poll-interval:
轮询间隔,adc是通过input事件上报

gpios :
配置gpio引脚格式<giio组 gpio号 工作电平 >

default-state:
默认状态

终端查看adc采样值

1
2
# 查看adc0 采样值 会根据按键按下,读取的值不同
cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw