600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 【树莓派C语言开发】实验06:轻触开关模块

【树莓派C语言开发】实验06:轻触开关模块

时间:2021-06-16 17:14:09

相关推荐

【树莓派C语言开发】实验06:轻触开关模块

文章目录

前言1.实验器材2.实验原理2.1电路图2.2接线3.程序示例3.1部分函数解析3.2 Geany编译器运行3.3Linux-Gcc编译器3.4程序优化结语

前言

一起开始本次的实验吧!👍

关注本专栏,和我一起学习树莓派开发板30+经典实验

C语言代码,0基础剖析!

还等什么😍心动不如行动!👉点我关注

本专栏代码仓库📝:Raspberry-practice

1.实验器材

树莓派40P软盘线+T型转接板+面包板轻触开关按键模块双色LED模块一堆跳线

上:双色LED模块;下:轻触开关模块

2.实验原理

2.1电路图

使用轻触开关作为树莓派的输入设备,按下开关时,树莓派GPIO端口检测到低电平(0v),表示按键被按下。松开按键时,树莓派检测到高电平(3.3v)

在本次实验中,将通过打印信息提示按键是否被按下。

轻触开关模块电路图如下:

2.2接线

在实验2的博客中,已经提到过树莓派针脚编号和T型转接板上编号的对应关系

在树莓派系统控制栏中,我们可以输入以下指令查看树莓派的GPIO接口

gpio readall

可以看到,17对应0,18对应1,27对应2。和我们的接线方式和初始化针脚的编号是对应的

本次实验的接线图如下,注意各个端口的接线关系

右上角红黑线是树莓派的散热风扇,和实验无关

3.程序示例

以下给出C语言的示例代码

//轻触开关按键实验#include <wiringPi.h>#include <stdio.h>#include <string.h>#define makerobo_BtnPin0 // 轻触按键PIN口#define makerobo_Rpin1 // 红色LED灯模块PIN#define makerobo_Gpin2 // 绿色LED灯模块PIN//双色LED控制函数void double_colorLED(char* color){pinMode(makerobo_Rpin, OUTPUT); //设置为输出模式pinMode(makerobo_Gpin, OUTPUT); //设置为输出模式if (!strcmp(color,"RED"))//点亮红色LED灯{digitalWrite(makerobo_Rpin, HIGH); digitalWrite(makerobo_Gpin, LOW);}else if (!strcmp(color,"GREEN")) //点亮绿色LED灯{digitalWrite(makerobo_Rpin, LOW);digitalWrite(makerobo_Gpin, HIGH);}elseprintf("makerobo Double color LED Error\n");}int main(){//初始化连接失败时,将消息打印到屏幕if(wiringPiSetup() == -1){printf("setup wiringPi failed!\n");return 1; }//轻触按键Pin设置为输入模式pinMode(makerobo_BtnPin, INPUT);double_colorLED("GREEN");while(1){//轻触按键去除抖动处理if(0 == digitalRead(makerobo_BtnPin)){// 按键有按下delay(10); // 延时去抖动if(0 == digitalRead(makerobo_BtnPin)){double_colorLED("RED"); // 点亮红色LED灯printf("Button is pressed\n"); // 打印出有按键按下}}else if(1 == digitalRead(makerobo_BtnPin)){// 没有按键按下亮绿灯delay(10);if(1 == digitalRead(makerobo_BtnPin)){double_colorLED("GREEN"); // 点亮绿色LED灯printf("No Button is pressed\n"); // 没有按键按下}}}return 0;}

3.1部分函数解析

一些函数在之前的博客中已具体介绍过,这里简单列出它们的功能

这里有个新的函数,作用是读取管脚的值

在本实验中用于接收轻触开关的按钮信号

3.2 Geany编译器运行

运行程序,代码会循环打印“没有按键按下”,LED亮绿灯

按下按键后,打印显示“按键已按下”,LED亮红灯

实验效果如下

3.3Linux-Gcc编译器

在命令行中输入以下编译指令,生成可执行文件

gcc -Wall 06Button.c -o TEST -lwiringPi

运行可执行文件后,可以观测到相同结果

3.4程序优化

我个人觉得这个程序用while(1)死循环并不是那么的优,程序需要手动CTRL+C终止,且终止后无法关闭LED灯。

下面对程序做出一些优化

依旧可以试试判断按键按下情况在程序运行后,关闭小灯

只需更改循环体和延时函数即可,在循环结束后,使用digitalWrite输入低电平关闭小灯的红/绿管脚,即完全关闭双色LED

int k=40;while(k--){//轻触按键去除抖动处理if(0 == digitalRead(makerobo_BtnPin)){// 按键有按下delay(500); // 延时去抖动if(0 == digitalRead(makerobo_BtnPin)){double_colorLED("RED"); // 点亮红色LED灯printf("Button is pressed\n"); // 打印出有按键按下}}else if(1 == digitalRead(makerobo_BtnPin)){// 没有按键按下亮绿灯delay(500);if(1 == digitalRead(makerobo_BtnPin)){double_colorLED("GREEN"); // 点亮绿色LED灯printf("No Button is pressed\n"); // 没有按键按下}}}//关闭LEDdigitalWrite(makerobo_Rpin, LOW);digitalWrite(makerobo_Gpin, LOW);delay(500);//延时查看关闭情况return 0;

结语

本次实验学习了轻触开关的使用方法,在未来的实验中,可以使用它来控制一些更复杂电路的开合

你学费了吗?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。