基于树莓派arm架构——智能感应垃圾桶项目

导读:本篇文章讲解 基于树莓派arm架构——智能感应垃圾桶项目,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

以树莓派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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!