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

以树莓派arm架构

以超声波测距+蜂鸣器+舵机 实现开盖、关盖

#include
#include	// 调用WiringPi库
#include	// 超声波测距头文件
#include	//调用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;
}

基于树莓派arm架构——智能感应垃圾桶项目_第1张图片

你可能感兴趣的:(树莓派,Linux系统学习)