树莓派 开关控制,树莓派按钮控制程序
文章前言1。实验设备。实验原理2.1电路图2.2接线图3。代码示例3.1代码思想解释参数 clb _ tmp 问题3.2linux运行代码尾声今天折腾vim编辑器很久了。我只是想实现在vim编辑器里可以把代码复制到windows电脑上,方便我写博客,但是我根本做不到。我放弃了,还是用树莓Pi系统复制吧。
关注本专栏,和我一起学习树莓派开发板30的经典实验!
c语言代码,0基础分析!
你还在等什么?心动不如行动!为什么我不关注本专栏的代码仓库?覆盆子-做法
1.实验设备:草莓派开发板、40p柔性排线、T型转接板、面包板振动传感器模块、双色LED模块、一堆跳线。
顶部:双色LED模块;下部:振动传感器模块
振动传感器模块与倾斜传感器模块非常相似,通过物理结构来判断当前状态。它也有PWR-LED和DO-LED。
2.实验原理振动开关传感器中采用常闭式振动传感器,可用于跟踪振动触发效果,如防盗报警、地震报警、智能汽车等。与常开型振动传感器相比,常闭型振动传感器的触发时间更长,可用于驱动继电器模块。
该模块采用常开型高灵敏度振动开关。当开关静止时,它处于开路断开状态。当受到外力触动,达到相应的地震力时,或者移动速度达到适当的离心力时,导电针就会瞬间导通,处于瞬间导通状态。当外力消失时,开关返回到开路断开状态。可用于各种振动触发、防盗报警、智能汽车、电子积木等。传感器M3专门配有固定安装孔,方便调整方向和固定。它采用宽电压LM393比较器,信号干净,波形好,驱动能力强,超过15mA。它配有一个可调节的精密电位计来调节灵敏度。
在这个实验中,双色LED模块连接到Raspberry Pi作为指示。或者当振动传感器被轻敲时,它将打开,双色LED将闪烁红色。再次点击它,LED就会变成绿色——每次轻按或轻按,两种颜色交替闪烁。
2.1电路图
2.2接线图Raspberry Pi
t形适配器
振动开关
GPIO 0
GPIO 17
做
5V
5V
VCC
地线
地线
地线
树莓派
t形适配器
双色LED
GPIO 1
GPIO 18
r(中间)
地线
地线
GND(-)
GPIO 2
GPIO 27
一般事务人员
因为接口和倾斜开关一模一样,接线方式也一样。
物理接线图就不在这里留了。与倾斜开关不同,连接振动开关后,两个指示灯都会亮起。当传感器振动时,DO-LED将闪烁。
3.代码示例相同,给出C语言的代码示例。
这里的wiringPi库函数已经在最近两次实验中使用过了。详见实验六的解释。
#包含wiringPi.h
#包含stdio.h
#定义makerobo_VibratePin 0 //振动传感器
#定义makerobo_Rpin 1 //红色LED引脚
#定义makerobo_Gpin 2 //绿色LED引脚
int clb _ tmp=0;//全局变量用于比较
//双色LED控制功能
void double_colorLED(int color)
{
pinMode(makerobo_Rpin,OUTPUT);//设置为输出模式
pinMode(makerobo_Gpin,输出);//设置为输出模式
If (0==color) //点亮红色LED灯
{
digitalWrite(makerobo_Rpin,高);
digitalWrite(makerobo_Gpin,低);
}
Else if (1==color) //打开绿色LED。
{
digitalWrite(makerobo_Rpin,低);
digitalWrite(makerobo_Gpin,高);
}
其他
printf(Makerobo双色LED错误\ n );//双色LED错误
}
//打印信息,打印出振动传感器的状态。
void makerobo_Print(int x)
{
如果(x!=clb_tmp)
{
如果(x==0)
printf(.make robo ON \ n );
如果(x==1)
printf(关闭机器人.\ n’);
clb _ tmp=x;//重置x
}
}
int main()
{
int clb _ status=0;//状态值
int clb _ tmp=0;//比较值
int clb _ value=1;//当前值
//当//wiringPi无法初始化连接时,将消息打印到屏幕上。
if(wiringPiSetup()==-1){
printf(安装wiringPi失败!);
返回1;
}
//振动传感器引脚设置为输入模式
pinMode(makerobo_VibratePin,INPUT);
while(1){
clb _ value=digital read(make robo _ vibrate pin);//获取振动感应值
if (clb_tmp!=clb _值)
{//振动传感器的输出值改变。
clb _ status//振动传感器状态加1。
if (clb_status 1)
{
clb _ status=0;//判断状态发生变化,如果变为2,则重置为0。
}
double _ color led(clb _ status);//控制双色LED模块
make robo _ Print(clb _ status);//打印出状态
延时(1000);//延迟1s
}
}
返回0;
}3.1代码思想解释clb_value接收振动传感器的返回值,每次振动返回值都会发生变化。
value的初始值为1。振动时接收到的返回值为0,与tmp不同,所以双色LED的状态、颜色发生变化。如果没有检测到振动,返回值为1,与tmp相同。双色LED的颜色不变。clb_tmp问题。void makerobo_Print(int x)函数中调用的其实是全局变量下的clb_tmp。
而在main函数中调用int clb _ tmp=0;//比较值,一个单独定义的局部变量,与全局tmp无关,所以makerobo_Print函数中clb_tmp函数的操作不影响main和status代码的比较。
为了不混淆全局变量和局部变量,建议在主函数clb_tmp1中重命名tmp。
3.2linux运行代码gcc-wall 08振动开关。c-o测试-lwiringpi
每次晃动传感器,双色LED就会变色,屏幕上会打印出开和关(每次晃动一次,打印一次)。
按CTRL+C终止程序
与倾斜开关的实时变化不同,振动开关的变化不是实时的,而是需要新的振动来触发它(就像一个按钮)。
假设我们想把它用作报警装置。假设振动状态在一定时间内变化多次,我们可以发出信号报警,说明你的门(或者什么东西)被移动了。
结论与之前的倾斜开关相比,本次实验的代码更加复杂。希望我的解释对你有帮助!
谢谢你看到了结局!如果对你有帮助,请点一个?非常感谢!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。