【树莓派C语言开发】实验07:倾斜开关模块

前言

昨天补全了树莓派初始化的博客,本专栏的模块就算是全啦!

欢迎大家把本专栏推荐给其他有兴趣学习树莓派的朋友!

QQ图片20220413084241

从本博客开始,将不再讲述Geany编译器的简单操作,所有操作都用linux命令行解决

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

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


1.实验器材

  • 树莓派开发板
  • 40p软排线+T型转接板+面包板
  • 倾斜传感器模块
  • 双色LED模块
  • 跳线一堆

IMG_20220413_091503

上:倾斜传感器;下:双色LED


2.实验原理

在倾斜开关中,有一个金属球,它用于检测小角度的倾斜。倾斜开关模块的结构为双向传到的球形倾斜该关。只要倾斜度的力满足条件,开关就会通电,从而输出低电平信号。

7.倾斜开关实验原理图

2.1实验接线

树莓派T型转接板倾斜开关
GPIO 0GPIO 17Do
5V5VVCC
GNDGNDGND
树莓派T型转接板双色LED
GPIO 1GPIO 18R(中间)
GNDGNDGND(-)
GPIO 2GPIO 27G(S)

07_Tilt-Switch_bb

2.2实物接线图

image-20220413093940553

接上排线后,倾斜开关模块的PWR-LED指示灯亮起

image-20220413094004143

当检测到倾斜角度改变时,DO-LED也会亮起,这时Do管脚将输出低电平,对应值为0。后续程序的编写将用到这个原理

Screenshot_2022_0413_093825


3.代码示例

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

//倾斜传感器实验
#include <wiringPi.h>
#include <stdio.h>

#define makerobo_TiltPin	0 //倾斜传感器管脚定义
#define makerobo_Rpin		1 //红色LED模块管脚定义
#define makerobo_Gpin		2 //绿色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);
	}
	else
		printf("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
		//检测到了之后,输出高电平0
		if(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部分代码解释

去抖动操作

因为倾斜开关和轻触开关都是物理结构,需要有一定的延时来进行去抖动操作

image-20220413130815576

直接用==比较字符串

 (color == "makeroboGREEN") 

这里用到了==直接比较字符串,之前我以为这样写是错误的,因为Linux-gcc报错了(但是可以编译出可执行文件,也能正常运行)

image-20220413131035933

实际上这个在VS下是可以正常运行的,不会报错

image-20220413131237200

个人理解,这样直接传入字符串的操作,实际上是在函数中创建了一个形参color,接收了传过来的常量字符串,随后的==比较的其实是内存中的字符串的地址,而不是直接比较字符串本身

这个代码里面包含的wiringPi函数,在之前的博客中已经讲解过了,详情可以看实验06👉传送门

如果有不懂的,可以在评论区提出!


3.2 Linux编译运行代码

输入以下语句编译这个代码,生成可执行文件TEST

gcc -Wall 07tiltswitch.c -o TEST -lwiringPi

./TEST运行这个文件,按CTRL+C终止程序

GIF

3.3运行效果

抬起倾斜开关,LED亮绿灯。放下它后,变成默认的红灯

Screenshot_2022_0413_132501

结语

本次实验到这里就结束啦!感觉这个倾斜开关就是手机中陀螺仪的青春版

目前我设想的是,以后的小车实验中可以通过它来判断小车现在是在上坡还是在平地,如果在上坡,就加大马达的输出。嗯,应该是这样!

QQ图片20220413084241

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕雪华年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值