极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10222|回复: 3

超声波壁障和红外中断

[复制链接]
发表于 2015-11-16 15:52:53 | 显示全部楼层 |阅读模式
本帖最后由 song_kai_ming 于 2015-11-16 17:44 编辑

#include <Servo.h>

#include <DistanceSRF04.h>

/*
作者:XXX
时间:2015年10月14日
IDE版本号:1.5.7
作用:超声波测距及避障
*/
int echo = 9;  // 定義超音波信號接收腳位
int trig =8;  // 定義超音波信號發射腳位

void setup()
{
   Serial.begin(9600);
   pinMode(echo, INPUT);    // 定義超音波輸入腳位
   pinMode(trig,OUTPUT);  // 定義超音波輸出腳位

   attachInterrupt(0, blink, LOW);//当int.0电平改变时,触发中断函数blink
   detection();


}

/*马达控制 */
void motor(char pin1,char pin2,char pwmpin,char state,int val)
{
    pinMode(pin1, OUTPUT);
    pinMode(pin2, OUTPUT);
    pinMode(pwmpin, OUTPUT);   

  if(state==2)
  {  
    analogWrite(pwmpin,val);
    digitalWrite(pin1,LOW);
    digitalWrite(pin2,HIGH);
   }
  else if(state==1)
{  
   analogWrite(pwmpin,val);
   digitalWrite(pin1,HIGH);
   digitalWrite(pin2,LOW);
}
else if(state==0)
{
    analogWrite(pwmpin,0);
    digitalWrite(pin1,HIGH);
    digitalWrite(pin2,LOW);
}
}
void forward(int i,int k)   //前进
{
  motor(14,15,3,1,i);
  motor(16,17,5,1,k);
}
void back (int j,int e)    //后退
{
   motor(14,15,3,2,j);
   motor(16,17,5,2,e);
}
void turnR(int m,int n)      //右转弯转
{
  motor(14,15,3,1,m);
  motor(16,17,5,2,n);
}
void turnL(int m,int n)      //左转弯转
{
  motor(14,15,3,2,m);
  motor(16,17,5,1,n);
}
void stop()            //车身移动停止
{
  while(1)
  {
  motor(14,15,3,0,0);
  motor(16,17,5,0,0);
  }

}
void stop1()            //车身移动停止
{

  motor(14,15,3,0,0);
  motor(16,17,5,0,0);


}

int sign=0;
void blink()
{
  sign=1;
}

//超声波测距
float Fspeedd=6;
void detection()
{
  digitalWrite(trig, LOW);   // 讓超聲波發射低電壓2μs
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);  // 讓超聲波發射高電壓10μs,這裡至少是10μs
  delayMicroseconds(10);
  digitalWrite(trig, LOW);    // 維持超聲波發射低電壓
  float Fdistance = pulseIn(echo, HIGH);  // 讀差相差時間
  Fdistance= Fdistance/5.8/10;       // 將時間轉為距離距离(單位:公分)
//  Serial.print("F distance:");      //輸出距離(單位:公分)
//  Serial.println(Fdistance);         //顯示距離
  Fspeedd = Fdistance;              // 將距離 讀入Fspeedd(前速)
  
}

void loop()
{
  //检测到中断 就后退
   if(sign==1)
   {
       // Serial.println("地地道道地地道道");
        detachInterrupt(0);
       servo_Horizontal(30);
       servo_Horizontal(90);
        back(140,140);
        delay(1000);
        turnL(140,140);
        delay(500);
        sign=0;
        attachInterrupt(0, blink, LOW);
        
  }
  
  //没中断时,处理障碍情况
  detection();
  //Serial.println(Fspeedd);
  if(Fspeedd > 5)
  {
     forward(140,140);     
  }
  else
  {
       servo_Horizontal(30);
       servo_Horizontal(90);
      
        back(140,140);
        delay(1000);
        turnR(140,140);
        delay(500);
   }


}
回复

使用道具 举报

 楼主| 发表于 2015-11-16 17:45:02 | 显示全部楼层
我先收藏在这里了,要用请留言
回复 支持 反对

使用道具 举报

发表于 2015-11-16 17:49:29 来自手机 | 显示全部楼层
song_kai_ming 发表于 2015-11-16 17:45
我先收藏在这里了,要用请留言

库函数包呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-17 16:57:55 | 显示全部楼层
守夜人 发表于 2015-11-16 17:49
库函数包呢

超声波函数库

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 03:15 , Processed in 0.044067 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表