久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
基于arduino的串口通信的舵機控制源代碼
[打印本頁]
作者:
張君波
時間:
2018-11-14 12:14
標題:
基于arduino的串口通信的舵機控制源代碼
u8 buf[10]={217,217,00,01,02,03,07,02,231,231};//落下應答
u8 buf1[10]={217,217,00,01,02,03,07,17,231,231};//抬起應答
int C_C[3];
unsigned char C_[26];
int servopin = 8;//設置舵機驅動腳到數字口8
int servopin1 = 9;
int servopin2 = 10;
int myangle; //定義角度變量
int myangle1; //定義角度變量
int myangle2; //定義角度變量
int pulsewidth;//定義脈寬變量
int pulsewidth1;//定義脈寬變量
int pulsewidth2;//定義脈寬變量
unsigned int S; //距離存儲
int trig=3; //發射信號
int echo=2; //接收信號
int val;
int val1;
int val2;
int j=0;
//要想使得舵機比較連續的旋轉,可以改變方波占空比
void servopulse(int servopin,int myangle)/*定義一個控制一號舵機的脈沖函數,用來模擬方式產生PWM值*/
{
pulsewidth=(myangle*11)+500;//將角度轉化為500-2480 的脈寬值
digitalWrite(servopin,HIGH);//將舵機接口電平置高
delayMicroseconds(pulsewidth);//延時脈寬值的微秒數
digitalWrite(servopin,LOW);//將舵機接口電平置低
delay(20-pulsewidth/1000);//延時周期內剩余時間,20可以改成4
}
void servopulse1(int servopin1,int myangle1)/*定義一個控制2號舵機脈沖函數,用來模擬方式產生PWM值*/
{
pulsewidth1=(myangle1*11)+500;//將角度轉化為500-2480 的脈寬值
digitalWrite(servopin1,HIGH);//將舵機接口電平置高
delayMicroseconds(pulsewidth1);//延時脈寬值的微秒數
digitalWrite(servopin1,LOW);//將舵機接口電平置低
delay(10);//延時周期內剩余時間
}
void servopulse2(int servopin2,int myangle2)/*定義一個控制3號舵機的脈沖函數,用來模擬方式產生PWM值*/
{
pulsewidth2=(myangle2*11)+500;//將角度轉化為500-2480 的脈寬值
digitalWrite(servopin2,HIGH);//將舵機接口電平置高
delayMicroseconds(pulsewidth2);//延時脈寬值的微秒數
digitalWrite(servopin2,LOW);//將舵機接口電平置低
delay(20-pulsewidth2/1000);//延時周期內剩余時間
}
void setup()
{
pinMode(servopin,OUTPUT);//設定舵機接口為輸出接口
pinMode(servopin1,OUTPUT);
pinMode(servopin2,OUTPUT);
pinMode(trig,OUTPUT); //設置引腳模式
pinMode(echo,INPUT);
Serial.begin(9600);//設置波特率為9600
while(Serial.read()>= 0)
{}
}
void loop()
{
servopulse(servopin,val);
servopulse(servopin1,val1);
if (Serial.available() > 0)
{
delay(10); // 等待數據傳完
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; //變量用于發送應答的開關條件
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]);//打印數據
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(); //執行測距函數
if(S>23){
fun3();//空函數不寫也中
range(); //執行測距函數
}
if(S<=23&&S>22){
fun4();//控制一號舵機旋轉
range(); //執行測距函數
}
if(S<=22)
{
fun3();//空函數不寫也中
range(); //執行測距函數
}
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) //左轉
{
//Serial.println(comdata);
fun8();
}
C_[12] =="";
if(C_[7] ==4 ) //左歸位
{
//Serial.println(comdata);
fun9();
}
C_[12] =="";
if(C_[7] ==5 ) //右轉
{
// Serial.println(comdata);
fun10();
}
C_[12] ="";
//while(Serial.read()>=0){} //清空串口緩存
}
void fun1()
{
/*for(val;val<=15;val+=1)//val+=3可以改變舵機轉到指定角度的速度
{
for(int i=0;i<=5;i++) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin,val);//模擬產生PWM
}}
for(val;val<=30;val+=1)//val+=3可以改變舵機轉到指定角度的速度
{
for(int i=0;i<=5;i++) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin,val);//模擬產生PWM
}}*/
for(val1;val1<=10;val1+=1)//val+=5可以改變舵機轉到指定角度的速度
{
for(int i=0;i<=5;i++) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin1,val1);//模擬產生PWM
}}
for(val1;val1<=30;val1+=3)//val+=5可以改變舵機轉到指定角度的速度
{
for(int i=0;i<=5;i++) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin1,val1);//模擬產生PWM
}}
for(val1;val1<=50;val1+=5)//val+=5可以改變舵機轉到指定角度的速度
{
for(int i=0;i<=5;i++) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin1,val1);//模擬產生PWM
}}
for(val1;val1<=70;val1+=1)//val+=5可以改變舵機轉到指定角度的速度
{
for(int i=0;i<=5;i++) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin1,val1);//模擬產生PWM
}}
}
void fun2()
{
/*for(val;val>=0;val-=1)//val-=5可以改變舵機轉到指定角度的速度
{
for(int i=0;i<=5;i++) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin,val);//模擬產生PWM
}}*/
for(val1;val1>=0;val1-=1)
{
for(int i=0;i<=5;i++) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin1,val1);//模擬產生PWM
}}
}
void range()
{ //測距函數
digitalWrite(trig,LOW); //測距
delayMicroseconds(2); //延時2微秒
digitalWrite(trig,HIGH);
delayMicroseconds(20);
digitalWrite(trig,LOW);
int distance = pulseIn(echo,HIGH); //讀取高電平時間
distance = distance/58; //按照公式計算
S = distance; //把值賦給S
Serial.println(S); //向串口發送S的值,可以在顯示器上顯示距離
}
void fun3()
{
}
void fun4()
{
for(val;val<=40;val+=1)//val+=3可以改變舵機轉到指定角度的速度
{
for(int i=0;i<=5;i++) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin,val);//模擬產生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++) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin2,val2);
}}
}
void fun7()
{
for(val2;val2<=50;val2+=2)//val+=5可以改變舵機轉到指定角度的速度
{
for(int i=0;i<=5;i+=1) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin2,val2);//模擬產生PWM
}}
for(val2;val2<=75;val2+=1)//val+=5可以改變舵機轉到指定角度的速度
{
for(int i=0;i<=5;i+=1) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin2,val2);//模擬產生PWM
}}
}
void fun8()
{
for(val2;val2<=100;val2+=1)
{
for(int i=0;i<=5;i++) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin2,val2);
}}
}
void fun9()
{
for(val2;val2>=75;val2-=2)
{
for(int i=0;i<=5;i++) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin2,val2);
}}
}
void fun10()
{
for(val2;val2>=50;val2-=1)
{
for(int i=0;i<=5;i++) //產生PWM個數,等效延時以保證能轉到響應角度
{
servopulse(servopin2,val2);
}}
}
復制代碼
全部資料51hei下載地址:
duo3.zip
(2.29 KB, 下載次數: 38)
2018-11-14 12:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
超碰麻豆
|
国产精品区二区三区日本
|
欧美精品999
|
国产高清视频在线
|
国产伦精品一区二区三区视频网站
|
国产做受网站
|
日韩网站在线观看
|
久久99九九
|
日韩精品一级
|
国产一级视频在线观看
|
国产一区二区日韩
|
亚洲伊人影院
|
麻豆一区二区三区四区
|
精品久久视频
|
国产精品久久久久久久久久久久久
|
国产又粗又猛又黄又爽无遮挡
|
日韩在线免费播放
|
亚洲第一视频网站
|
国产黄a
|
黄色三级视频网站
|
国产精品手机在线
|
美女福利网站
|
国产黄a三级三级三级看三级男男
|
成人午夜在线视频
|
国产福利视频在线
|
久久精品毛片
|
国产这里只有精品
|
亚洲精品欧美
|
久久99视频
|
久久精品视频一区
|
一级毛片黄色
|
亚洲福利网站
|
成人黄色av
|
香蕉伊人网
|
永久免费看片在线播放
|
精品一区二区三区四区五区
|
午夜av在线播放
|
欧美精品久久久久久久
|
www..com黄
|
精品欧美一区二区精品久久
|
国产一级片网站
|