|
- u8 buf[10]={217,217,00,01,02,03,07,02,231,231};//落下應(yīng)答
- u8 buf1[10]={217,217,00,01,02,03,07,17,231,231};//抬起應(yīng)答
- int C_C[3];
- unsigned char C_[26];
- int servopin = 8;//設(shè)置舵機(jī)驅(qū)動(dòng)腳到數(shù)字口8
- int servopin1 = 9;
- int servopin2 = 10;
- int myangle; //定義角度變量
- int myangle1; //定義角度變量
- int myangle2; //定義角度變量
- int pulsewidth;//定義脈寬變量
- int pulsewidth1;//定義脈寬變量
- int pulsewidth2;//定義脈寬變量
- unsigned int S; //距離存儲(chǔ)
- int trig=3; //發(fā)射信號(hào)
- int echo=2; //接收信號(hào)
- int val;
- int val1;
- int val2;
- int j=0;
- //要想使得舵機(jī)比較連續(xù)的旋轉(zhuǎn),可以改變方波占空比
- void servopulse(int servopin,int myangle)/*定義一個(gè)控制一號(hào)舵機(jī)的脈沖函數(shù),用來模擬方式產(chǎn)生PWM值*/
- {
- pulsewidth=(myangle*11)+500;//將角度轉(zhuǎn)化為500-2480 的脈寬值
- digitalWrite(servopin,HIGH);//將舵機(jī)接口電平置高
- delayMicroseconds(pulsewidth);//延時(shí)脈寬值的微秒數(shù)
- digitalWrite(servopin,LOW);//將舵機(jī)接口電平置低
- delay(20-pulsewidth/1000);//延時(shí)周期內(nèi)剩余時(shí)間,20可以改成4
- }
- void servopulse1(int servopin1,int myangle1)/*定義一個(gè)控制2號(hào)舵機(jī)脈沖函數(shù),用來模擬方式產(chǎn)生PWM值*/
- {
- pulsewidth1=(myangle1*11)+500;//將角度轉(zhuǎn)化為500-2480 的脈寬值
- digitalWrite(servopin1,HIGH);//將舵機(jī)接口電平置高
- delayMicroseconds(pulsewidth1);//延時(shí)脈寬值的微秒數(shù)
- digitalWrite(servopin1,LOW);//將舵機(jī)接口電平置低
- delay(10);//延時(shí)周期內(nèi)剩余時(shí)間
- }
-
- void servopulse2(int servopin2,int myangle2)/*定義一個(gè)控制3號(hào)舵機(jī)的脈沖函數(shù),用來模擬方式產(chǎn)生PWM值*/
- {
- pulsewidth2=(myangle2*11)+500;//將角度轉(zhuǎn)化為500-2480 的脈寬值
- digitalWrite(servopin2,HIGH);//將舵機(jī)接口電平置高
- delayMicroseconds(pulsewidth2);//延時(shí)脈寬值的微秒數(shù)
- digitalWrite(servopin2,LOW);//將舵機(jī)接口電平置低
- delay(20-pulsewidth2/1000);//延時(shí)周期內(nèi)剩余時(shí)間
- }
- void setup()
- {
- pinMode(servopin,OUTPUT);//設(shè)定舵機(jī)接口為輸出接口
- pinMode(servopin1,OUTPUT);
- pinMode(servopin2,OUTPUT);
- pinMode(trig,OUTPUT); //設(shè)置引腳模式
- pinMode(echo,INPUT);
- Serial.begin(9600);//設(shè)置波特率為9600
- while(Serial.read()>= 0)
- {}
- }
- void loop()
- {
- servopulse(servopin,val);
- servopulse(servopin1,val1);
- if (Serial.available() > 0)
- {
- delay(10); // 等待數(shù)據(jù)傳完
- int numdata = Serial.available();
- for(int i=0;i<numdata;i++)
- {
- C_[i]=Serial.read();
- }
- //for(int i=0;i<numdata;i++)
- //Serial.println(C_[i]);
- if(C_[0]==217&C_[8]==231)
- {
- if(C_[1]==217&C_[9]==231)
- {
- j = 1; //變量用于發(fā)送應(yīng)答的開關(guān)條件
- for(int i=0;i<3;i++)
- {
- C_C[i]=C_[2+4*i]*256*256*256+C_[3+4*i]*256*256+C_[4+4*i]*256+C_[5+4*i];
- }
- C_[0]==0; //幀頭幀尾必須清零
- C_[1]==0;
- C_[8]==0;
- C_[9]==0;
- }
- else
- {
- for(int i=0;i<numdata;i++)
- {
- C_[i]=0;
- }
- }
- }
- /* else
- {
- for(int i=0;i<numdata;i++)
- {
- C_[i]=0;
- }}*/
- for(int i=0;i<numdata;i++)
- Serial.println(C_[i]);//打印數(shù)據(jù)
-
- Serial.println(numdata);
- while(Serial.read()>=0)
- {} //清空串口緩存
-
- }
-
- if(C_[7]==17)//落下
- {
-
- //Serial.println(C_[7]);
- fun1();
- if(j == 1)
- {
- j = 0;
- Serial.write(buf, 10);
- }
- }
- C_[12] =="";
- //while(Serial.read()>=0){} //清空串口緩存
- range(); //執(zhí)行測(cè)距函數(shù)
- if(S>23){
- fun3();//空函數(shù)不寫也中
- range(); //執(zhí)行測(cè)距函數(shù)
- }
- if(S<=23&&S>22){
- fun4();//控制一號(hào)舵機(jī)旋轉(zhuǎn)
- range(); //執(zhí)行測(cè)距函數(shù)
- }
- if(S<=22)
- {
- fun3();//空函數(shù)不寫也中
- range(); //執(zhí)行測(cè)距函數(shù)
- }
- if(val1==50)
- {
- for(int i=0;i<10;i++)
- {
- C_[i]=0;
- }}
- if(val==0&val1==0)
- {
- for(int i=0;i<10;i++)
- {
- C_[i]=0;
- }}
-
- if(C_[7]==1)//抬起
- {
- // Serial.println(C_[7]);
- fun2();
- if(j ==1)
- {
- j = 0;
- Serial.write(buf1, 10);
- }
- }
- C_[12] =="";
- if(C_[7] ==0 ) //歸0
- {
- // Serial.println(comdata);
- fun6();
- }
- C_[12] =="";
- if(C_[7] ==2 ) //右歸位
- {
- //Serial.println(comdata);
- fun7();
- }
- C_[12] =="";
- if(C_[7] ==3) //左轉(zhuǎn)
- {
- //Serial.println(comdata);
- fun8();
- }
- C_[12] =="";
- if(C_[7] ==4 ) //左歸位
- {
- //Serial.println(comdata);
- fun9();
- }
- C_[12] =="";
- if(C_[7] ==5 ) //右轉(zhuǎn)
- {
- // Serial.println(comdata);
- fun10();
- }
- C_[12] ="";
- //while(Serial.read()>=0){} //清空串口緩存
- }
-
-
-
- void fun1()
- {
- /*for(val;val<=15;val+=1)//val+=3可以改變舵機(jī)轉(zhuǎn)到指定角度的速度
- {
- for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin,val);//模擬產(chǎn)生PWM
- }}
- for(val;val<=30;val+=1)//val+=3可以改變舵機(jī)轉(zhuǎn)到指定角度的速度
- {
- for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin,val);//模擬產(chǎn)生PWM
- }}*/
- for(val1;val1<=10;val1+=1)//val+=5可以改變舵機(jī)轉(zhuǎn)到指定角度的速度
- {
- for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin1,val1);//模擬產(chǎn)生PWM
- }}
- for(val1;val1<=30;val1+=3)//val+=5可以改變舵機(jī)轉(zhuǎn)到指定角度的速度
- {
- for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin1,val1);//模擬產(chǎn)生PWM
- }}
- for(val1;val1<=50;val1+=5)//val+=5可以改變舵機(jī)轉(zhuǎn)到指定角度的速度
- {
- for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin1,val1);//模擬產(chǎn)生PWM
- }}
- for(val1;val1<=70;val1+=1)//val+=5可以改變舵機(jī)轉(zhuǎn)到指定角度的速度
- {
- for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin1,val1);//模擬產(chǎn)生PWM
- }}
- }
-
- void fun2()
- {
- /*for(val;val>=0;val-=1)//val-=5可以改變舵機(jī)轉(zhuǎn)到指定角度的速度
- {
- for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin,val);//模擬產(chǎn)生PWM
- }}*/
-
- for(val1;val1>=0;val1-=1)
- {
- for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin1,val1);//模擬產(chǎn)生PWM
- }}
- }
-
- void range()
- { //測(cè)距函數(shù)
- digitalWrite(trig,LOW); //測(cè)距
- delayMicroseconds(2); //延時(shí)2微秒
- digitalWrite(trig,HIGH);
- delayMicroseconds(20);
- digitalWrite(trig,LOW);
- int distance = pulseIn(echo,HIGH); //讀取高電平時(shí)間
- distance = distance/58; //按照公式計(jì)算
- S = distance; //把值賦給S
- Serial.println(S); //向串口發(fā)送S的值,可以在顯示器上顯示距離
- }
-
- void fun3()
- {
-
- }
- void fun4()
- {
- for(val;val<=40;val+=1)//val+=3可以改變舵機(jī)轉(zhuǎn)到指定角度的速度
- {
- for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin,val);//模擬產(chǎn)生PWM
- }}
- }
- /*void fun5()
- {
- for(int i=0;i<numdata;i++)
- {
- C_[i]=0;
- }
- }*/
- void fun6()
- {
- for(val2;val2>=0;val2-=2)
- {
- for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin2,val2);
- }}
- }
- void fun7()
- {
- for(val2;val2<=50;val2+=2)//val+=5可以改變舵機(jī)轉(zhuǎn)到指定角度的速度
- {
- for(int i=0;i<=5;i+=1) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin2,val2);//模擬產(chǎn)生PWM
- }}
- for(val2;val2<=75;val2+=1)//val+=5可以改變舵機(jī)轉(zhuǎn)到指定角度的速度
- {
- for(int i=0;i<=5;i+=1) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin2,val2);//模擬產(chǎn)生PWM
- }}
- }
- void fun8()
- {
- for(val2;val2<=100;val2+=1)
- {
- for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin2,val2);
- }}
- }
- void fun9()
- {
- for(val2;val2>=75;val2-=2)
- {
- for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin2,val2);
- }}
- }
- void fun10()
- {
- for(val2;val2>=50;val2-=1)
- {
- for(int i=0;i<=5;i++) //產(chǎn)生PWM個(gè)數(shù),等效延時(shí)以保證能轉(zhuǎn)到響應(yīng)角度
- {
- servopulse(servopin2,val2);
- }}
- }
復(fù)制代碼
全部資料51hei下載地址:
duo3.zip
(2.29 KB, 下載次數(shù): 38)
2018-11-14 12:13 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|