接上文[【ELF 2学习板试用】命令行功能测试-shell脚本进行IO控制-红绿灯项目(/jishu_2475305_1_1.html)
红绿灯按钮项目
增加按钮控制
为了增加按钮控制功能我们需要在现有的红绿灯项目中加入按钮输入并根据按钮的状态来控制LED灯的行为。
2种方式接按钮
- 普通io读电平硬或软件消抖
- 采用ELF 2学习板现在recovery 按钮ADC 读电平
以下是详细的步骤和示例代码。
- ELF 2学习板
P26 的 15 学习板 功能 GPIO3_A2普通io读电平GPIO3_A2 (的编号为 323+80+2= 98 )引脚进行IO 读电平
root@elf2-buildroot:~#
[Kroot@elf2-buildroot:~# echo 98 > /sys/class/gpio/export
root@elf2-buildroot:~# echo in > /sys/class/gpio/gpio98/direction
root@elf2-buildroot:~# cat /sys/class/gpio/gpio98/value
1
root@elf2-buildroot:~# cat /sys/class/gpio/gpio98/value
0
2.按钮
学习板 功能SARADC_VIN1读ADC电平
root@elf2-buildroot:~# cat /sys/bus/iio/devices/iio:device0/in_voltage1_raw1
4085`
硬件
- ELF 2学习板 一款用于嵌入式系统学习的开发板。
- 红绿灯板 一个简单的外部设备包含红、绿、黄三个LED灯。
连接1*
ELF 2学习板
按钮
红绿灯板

连接2
红绿灯板与ELF 2学习板P26连接如下
- 红绿灯板 3V3 接学习板 P26 的 1 学习板 功能3V3
- 红绿灯板 GND 接学习板 P26 的 9 学习板 功能 GND
- 红绿灯板 LEDr 红 接学习板 P26 的 11 学习板 功能 GPIO3_B5
- 红绿灯板 LEDg 绿 接学习板 P26 的 7 学习板 功能 GPIO3_B3
- 红绿灯板 LEDy 接学习板 P26 的 13 学习板 功能 GPIO3_B4

软件* SSH连接 通过MobaXterm工具进行SSH连接。* 脚本编写 使用shell脚本控制LED灯的亮灭。
接ssh
打开elfboard\01-教程文档\ELF 2开发板快速启动手册.pdf 文件
命令行功能测试中ADC例:

脚本编写
脚本内容
#!/bin/sh
LEDr_GPIO="GPIO3_B5"
LEDg_GPIO="GPIO3_B3"
LEDy_GPIO="GPIO3_B4"
read_button_state() {
cat /sys/bus/iio/devices/iio:device0/in_voltage1_raw
}
control_leds() {
cmddemo_gpio.sh $LEDr_GPIO 0
cmddemo_gpio.sh $LEDg_GPIO 0
cmddemo_gpio.sh $LEDy_GPIO 0
cmddemo_gpio.sh $LEDr_GPIO 1
sleep 5
cmddemo_gpio.sh $LEDr_GPIO 0
cmddemo_gpio.sh $LEDg_GPIO 1
sleep 5
cmddemo_gpio.sh $LEDg_GPIO 0
cmddemo_gpio.sh $LEDy_GPIO 1
sleep 0.5
cmddemo_gpio.sh $LEDy_GPIO 0
sleep 0.5
cmddemo_gpio.sh $LEDy_GPIO 1
sleep 0.5
}
while true; do
button_state=$(read_button_state)
echo "$button_state"
if ((button_state>4000)); then
echo off
cmddemo_gpio.sh $LEDr_GPIO 0
cmddemo_gpio.sh $LEDg_GPIO 0
cmddemo_gpio.sh $LEDy_GPIO 0
else
echo off
control_leds
fi
sleep 0.1
done
脚本解释
- 循环控制 使用
while true
实现无限循环。
- GPIO控制 使用
cmddemo_gpio.sh
脚本控制GPIO引脚的高低电平驱动程序。
- **cat /sys/bus/iio/devices/iio:device0/in_voltage1_raw **显示按钮状态
- 延时 使用
sleep
命令实现延时效果。
脚本运行
权限设置
chmod u+x rgb2.sh
运行脚本
sh rgb2.sh

root@elf2-buildroot:~# sh rgb2.sh[2Pcd /opt/
root@elf2-buildroot:/opt# [?5h[?5lcd /opt/sh rgb2.sh
4090
Button is not pressed, LEDs are off.
4095
Button is not pressed, LEDs are off.
6
Button is pressed, .
4093
Button is not pressed, LEDs are off.
4095
Button is not pressed, LEDs are off.
灯正常闪!
运行结果
- 灯的闪烁模式
- 红灯亮5秒
- 绿灯亮5秒
- 黄灯快速闪烁三次每次0.5秒
- 按钮灯正常闪烁 达到了预期的效果红、绿、黄灯按照预定的模式闪烁。
红绿灯按钮项目完成。达到预期。