文章目录
前言1.实验器材2.实验原理2.1实验接线2.2实物接线图 3.代码示例3.1部分代码解释去抖动操作直接用`==`比较字符串 3.2 Linux编译运行代码3.3运行效果 结语前言
昨天补全了树莓派初始化的博客,本专栏的模块就算是全啦!
欢迎大家把本专栏推荐给其他有兴趣学习树莓派的朋友!
从本博客开始,将不再讲述Geany编译器的简单操作,所有操作都用linux命令行解决
关注本专栏,和我一起学习树莓派开发板30+经典实验!
C语言代码,0基础剖析!
还等什么😍心动不如行动!👉点我关注
本专栏代码仓库📝:Raspberry-practice
1.实验器材
树莓派开发板40p软排线+T型转接板+面包板倾斜传感器模块双色LED模块跳线一堆上:倾斜传感器;下:双色LED
2.实验原理
在倾斜开关中,有一个金属球,它用于检测小角度的倾斜。倾斜开关模块的结构为双向传到的球形倾斜该关。只要倾斜度的力满足条件,开关就会通电,从而输出低电平信号。
2.1实验接线
2.2实物接线图
接上排线后,倾斜开关模块的PWR-LED
指示灯亮起
当检测到倾斜角度改变时,DO-LED
也会亮起,这时Do
管脚将输出低电平,对应值为0。后续程序的编写将用到这个原理
3.代码示例
下面给出C语言的示例代码
//倾斜传感器实验#include <wiringPi.h>#include <stdio.h>#define makerobo_TiltPin0 //倾斜传感器管脚定义#define makerobo_Rpin1 //红色LED模块管脚定义#define makerobo_Gpin2 //绿色LED模块管脚定义//双色LED控制函数void double_colorLED(char* color){pinMode(makerobo_Rpin, OUTPUT); //设置为输出模式pinMode(makerobo_Gpin, OUTPUT); //设置为输出模式if (color == "makeroboRED")//点亮红色LED灯{digitalWrite(makerobo_Rpin, HIGH);digitalWrite(makerobo_Gpin, LOW);}else if (color == "makeroboGREEN") //点亮绿色LED灯{digitalWrite(makerobo_Rpin, LOW);digitalWrite(makerobo_Gpin, HIGH);}elseprintf("Double color LED Error");}int main(void){//初始化连接失败时,将消息打印到屏幕if(wiringPiSetup() == -1){printf("setup wiringPi failed !");return 1; }//倾斜传感器Pin设置为输入模式pinMode(makerobo_TiltPin, INPUT);double_colorLED("makeroboGREEN");while(1){//如果没有检测到倾斜,输出高电平1//检测到了之后,输出高电平0if(0 == digitalRead(makerobo_TiltPin)){//倾斜传感器发生倾斜delay(10); //倾斜传感器去除抖动处理if(0 == digitalRead(makerobo_TiltPin)){double_colorLED("makeroboRED"); // 点亮红色LED灯printf("Tilt!\n"); // 打印出出现倾斜}}else if(1 == digitalRead(makerobo_TiltPin)){// 倾斜传感器没有发生倾斜delay(10);if(1 == digitalRead(makerobo_TiltPin)){while(!digitalRead(makerobo_TiltPin));double_colorLED("makeroboGREEN"); // 点亮绿色LED灯printf("No Tilt!\n"); // 打印没有出现倾斜}}}return 0;}
3.1部分代码解释
去抖动操作
因为倾斜开关和轻触开关都是物理结构,需要有一定的延时来进行去抖动操作
直接用==
比较字符串
(color == "makeroboGREEN")
这里用到了==
直接比较字符串,之前我以为这样写是错误的,因为Linux-gcc
报错了(但是可以编译出可执行文件,也能正常运行)
实际上这个在VS下是可以正常运行的,不会报错
个人理解,这样直接传入字符串的操作,实际上是在函数中创建了一个形参color
,接收了传过来的常量字符串,随后的==
比较的其实是内存中的字符串的地址,而不是直接比较字符串本身
这个代码里面包含的wiringPi函数,在之前的博客中已经讲解过了,详情可以看实验06👉传送门
如果有不懂的,可以在评论区提出!
3.2 Linux编译运行代码
输入以下语句编译这个代码,生成可执行文件TEST
gcc -Wall 07tiltswitch.c -o TEST -lwiringPi
./TEST
运行这个文件,按CTRL+C
终止程序
3.3运行效果
抬起倾斜开关,LED亮绿灯。放下它后,变成默认的红灯
结语
本次实验到这里就结束啦!感觉这个倾斜开关就是手机中陀螺仪的青春版。
目前我设想的是,以后的小车实验中可以通过它来判断小车现在是在上坡还是在平地,如果在上坡,就加大马达的输出。嗯,应该是这样!
如果觉得《【树莓派C语言开发】实验07:倾斜开关模块》对你有帮助,请点赞、收藏,并留下你的观点哦!