按键与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
|