- #define IN1 12//12口電機右正反轉,引腳可調下同
- #define IN2 11//11口電機右調速
- #define IN3 10//10口電機左正反轉
- #define IN4 9//9口電機左調速
- #define hN1 4//4口左1紅外
- //#define hN2 7//7口左2紅外
- #define hN3 8//8口右3紅外
- #define Trig 2//超聲波Trig
- #define Echo 3//超聲波Echo
- #define Trig2 5//超聲波Trig2
- #define Echo2 6//超聲波Echo2
- int Time=0;//高電平時間
- int X=0; //X是距離,單位厘米
- int X2=0; //X是距離,單位厘米
- long ran;//定義隨機變量(1到4)
- int xleft=0;//紅外感應左
- //int xzhong=0;//紅外感應中
- int xreight=0;//紅外感應右左
- void motor(int x,int y)//x=1是后退;x=2是前;x=3是左;x=4是右;y是轉速
- {
- switch(x){
- case 1:
- digitalWrite(IN1,1);
- analogWrite(IN2,y);
- digitalWrite(IN3,0);
- analogWrite(IN4,y);
- break;
- case 2:
- digitalWrite(IN1,0);
- analogWrite(IN2,y);
- digitalWrite(IN3,1);
- analogWrite(IN4,y);
- break;
- case 3:
- digitalWrite(IN1,0);
- analogWrite(IN2,y);
- digitalWrite(IN3,0);
- analogWrite(IN4,y);
- break;
- case 4:
- digitalWrite(IN1,1);
- analogWrite(IN2,y);
- digitalWrite(IN3,1);
- analogWrite(IN4,y);
- break;
- }
- Serial.println("x=");
- Serial.println(x);
- }
- void loop() {
- csb();
- ydyd();
-
- }
- void setup() {
- Serial.begin(9600);
- pinMode(IN1,OUTPUT);
- pinMode(IN2,OUTPUT);
- pinMode(IN3,OUTPUT);
- pinMode(IN4,OUTPUT);
- pinMode(Trig,OUTPUT);//口是對超聲波輸出波形Trig
- pinMode(Echo,INPUT);//口是超聲波反饋Echo
- pinMode(hN1,INPUT);//hN1口是1號紅外檢測
- //pinMode(hN2,INPUT);//hN2口是2號紅外檢測
- pinMode(hN3,INPUT);//hN3口是3號紅外檢測
- //randomSeed(analogRead(0));
- //attachInterrupt(0,back,RISING);//中斷函數
- }
- /*void back()
- {
- motor(1,120);
- }*/
-
-
- void csb(){
- digitalWrite(Trig,LOW);//3口,輸出低電平
- delayMicroseconds(2);//等待2微秒
- digitalWrite(Trig,HIGH);//3口,輸出高電平
- delayMicroseconds(10);//等待10微秒,觸發信號
- digitalWrite(Trig,LOW);//拉低電平
- Time=pulseIn(Echo,HIGH);//檢測反饋的高電平時間
- X=Time/58;//計算距離
- digitalWrite(Trig2,LOW);//3口,輸出低電平
- delayMicroseconds(2);//等待2微秒
- digitalWrite(Trig2,HIGH);//3口,輸出高電平
- delayMicroseconds(10);//等待10微秒,觸發信號
- digitalWrite(Trig2,LOW);//拉低電平
- Time=pulseIn(Echo2,HIGH);//檢測反饋的高電平時間
- X2=Time/58;//計算距離
- }
- void ydyd(){
- xleft=digitalRead(hN1);
- //xzhong=digitalRead(hN2);
- xreight=digitalRead(hN3);
- if(X>=5)
- {
- motor(1,100);
- delay(1000);
- }
- else
- {
- if((xleft==1)&&(xreight==1))
- {
- // ran=random (2,5);
- motor(2,120);
-
-
- }
- if((xleft==0)&&(xreight==1))
- {
- motor(3,100);
- }
- if((xleft==1)&&(xreight==0))
- {
- motor(4,100);
- }
- if((xleft==0)&&(xreight==0))
- {
- digitalWrite(IN1,0);
- analogWrite(IN2,0);
- digitalWrite(IN3,0);
- analogWrite(IN4,0);
- }
- if(X2>=5)
- {
- motor(2,100);
- delay(1000);
- }
- }
- Serial.println("X=");
- Serial.println(X);
- Serial.println("x1=");
- Serial.println(xleft);
- Serial.println("xr=");
- Serial.println(xreight);
- }
復制代碼
|