以树莓派arm架构
以超声波测距+蜂鸣器+舵机 实现开盖、关盖
#include<stdio.h>
#include<wiringPi.h> // 调用WiringPi库
#include<sys/time.h> // 超声波测距头文件
#include<softPwm.h> //调用PWM库
#define Echo 5 //超声波端口
#define Trig 4 //超声波端口
#define BEEP 21 //蜂鸣器
#define DUOJI 3 //舵机端口
void initBeep()
{
pinMode(BEEP,OUTPUT); //初始化蜂鸣器
}
void initDUOJI()
{
pinMode(DUOJI,PWM_OUTPUT); //初始化舵机
}
void initChaoSB()
{
pinMode(Echo,INPUT); //设置端口为输入
pinMode(Trig,OUTPUT); //设置端口为输出
}
float Measure()
{
struct timeval t1; //超声波测距结构体,系统自带
struct timeval t2;
long start; // 刚开始接受信号
long end; // 最后接受信号
float distance;
digitalWrite(Trig,LOW); // 让超声波一开始平稳
delayMicroseconds(2);
digitalWrite(Trig,HIGH); //发出超声波脉冲,开始测距
delayMicroseconds(10);
digitalWrite(Trig,LOW);
while(!(digitalRead(Echo) == 1) ); //获取当前时间,最开始接受到返回信号的时间
gettimeofday(&t1,NULL);
while(!(digitalRead(Echo) == 0) ); //获取当前时间,最后接受到返回信号的时间
gettimeofday(&t2,NULL);
start = t1.tv_sec*1000000 + t1.tv_usec;
end = t2.tv_sec*1000000 + t2.tv_usec;
distance = (float)(end - start) / 1000000 * 34000 / 2; //测出信号往返距离
return distance;
}
int main()
{
float Distance;
if(wiringPiSetup() == 1)
{
printf("程序初始化失败\n");
}
// 初始化硬件端口
initChaoSB();
initBeep();
initDUOJI();
digitalWrite(BEEP,HIGH); //防止蜂鸣器一上电就乱叫
while(1)
{
Distance = Measure();
// softPwmCreate(DUOJI,20,200);
if( Distance < 15)
{
digitalWrite(BEEP,LOW);
softPwmCreate(DUOJI,20,200); // 初始 PWM 控制舵机旋转
softPwmWrite(DUOJI,10); // 控制舵机开盖的角度
delay(1000);
softPwmWrite(DUOJI,25); // 控制舵机开盖的角度
digitalWrite(BEEP,HIGH); // 让蜂鸣器在开盖的时候响就好了
delay(1000);
}
printf(" distance = %0.2f cm\n",Distance);
delay(1000);
}
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68465.html