锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

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

时间:2022-08-28 07:00:00 2线3线传感器开关2开关传感器718c传感器模块

文章目录

  • 前言
  • 1.实验器材
  • 2.实验原理
    • 2.1实验接线
    • 2.2实物接线图
  • 3.代码示例
    • 3.部分代码解释
      • 去抖动操作
      • 直接用`==`比较字符串
    • 3.2 Linux编译操作代码
    • 3.3运行效果
  • 结语

前言

昨天补充了树莓派的初始化博客,这个专栏的模块就全了!

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

QQ图片20220413084241

从这个博客开始,它将不再被告知Geany简单操作编译器,所有所有操作linux命令行解决

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

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

  • 还在等什么?心不如行动!点我注意

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


1.实验器材

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


2.实验原理

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

2.1实验接线

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

2.2实物接线图

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

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


3.代码示例

以下是C语言的示例代码

//倾斜传感器实验 #include  #include   #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部分代码解释

去抖动操作

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

直接用==比较字符串

 (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亮绿灯。放下它后,变成默认的红灯

结语

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

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

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章