song_kai_ming 发表于 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);
   }


}

song_kai_ming 发表于 2015-11-16 17:45:02

我先收藏在这里了,要用请留言:)

守夜人 发表于 2015-11-16 17:49:29

song_kai_ming 发表于 2015-11-16 17:45
我先收藏在这里了,要用请留言

库函数包呢

song_kai_ming 发表于 2015-11-17 16:57:55

守夜人 发表于 2015-11-16 17:49 static/image/common/back.gif
库函数包呢

超声波函数库
页: [1]
查看完整版本: 超声波壁障和红外中断