一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Arduino學(xué)習(xí)經(jīng)驗(一)之解決舵機(jī)庫和pwm輸出沖突

 綠顏陌上蕉下客 2017-10-03

  一.前言     

   最近在公司學(xué)習(xí)Arduino uno ,用它實現(xiàn)小車超聲波避障功能。實現(xiàn)的功能很簡單,就是在小車前方掛一個超聲波模塊,當(dāng)碰到障礙物時,會通過舵機(jī)進(jìn)行擺頭,判斷兩邊的距離,進(jìn)行左右轉(zhuǎn)彎。但是碰到了這樣一個問題,舵機(jī)庫和pwm輸出沖突,當(dāng)舵機(jī)旋轉(zhuǎn)時,pwm輸出函數(shù)analogWrite()不管用了。

  二.解決

   先分析一下問題產(chǎn)生的原因,我們之前如果想控制舵機(jī),比較常見的方法就是調(diào)用舵機(jī)庫:

   #include
 
Servo myservo;  // create servo
object to control a
servo
               
// a maximum of eight servo objects can be created
 
int pos =
0;    // variable to store the servo position
 
void
setup()
{
  myservo.attach(9);  // attaches the servo on pin 9
to the servo object
}
 
 
void loop()
{
 
for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180
degrees
 
{                                 
// in steps of 1 degree
   
myservo.write(pos);             
// tell servo to go to position in variable 'pos'
   
delay(15);                      
// waits 15ms for the servo to reach the position
  }
  for(pos
= 180; pos>=1; pos-=1)     // goes from 180 degrees to 0
degrees
 
{                               
   
myservo.write(pos);             
// tell servo to go to position in variable 'pos'
   
delay(15);                      
// waits 15ms for the servo to reach the position
  }
}

     這種做法非常方便,但是為什么會跟pwm沖突呢,因為在Arduino里的庫封裝里,它們都是用了同一個定時器1,T/C1: Pin9(OC1A)和Pin10(OC1B),所以會導(dǎo)致沖突,如何解決呢,可以在硬件上修改引腳。不費事的辦法就是通過修改代碼來解決沖突。我們可以換一種方法來實現(xiàn)舵機(jī)的控制:

 

int servopin = 7;    //定義舵機(jī)接口數(shù)字接口7 也就是舵機(jī)的橙色信號線

 

 

 

void servopulse(int angle)//定義一個脈沖函數(shù)

 

{

 

  int pulsewidth=(angle*11)+500;  //將角度轉(zhuǎn)化為500-2480的脈寬值

 

  digitalWrite(servopin,HIGH);    //將舵機(jī)接口電平至高

 

  delayMicroseconds(pulsewidth);  //延時脈寬值的微秒數(shù)

 

  digitalWrite(servopin,LOW);     //將舵機(jī)接口電平至低

 

  delayMicroseconds(20000-pulsewidth);

 

}

 

 

 

void setup()

 

{

 

  pinMode(servopin,OUTPUT);//設(shè)定舵機(jī)接口為輸出接口

 

}

 

 

 

 

 

 

 

void loop()

 

{

 

    //把值的范圍映射到0到165左右

 

 for( int angle = 0;angle<180;angle+=10){

 

    for(int i=0;i<50;i++)  //發(fā)送50個脈沖

 

  {

 

       servopulse(angle);   //引用脈沖函數(shù)

 

  }   delay(1000);  } }

 

   直接通過延時函數(shù)來給舵機(jī)脈沖,達(dá)到控制的效果,因為Arduino里延時函數(shù)delay()用的是定時器0,所以就不會沖突了。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美日韩国内一区二区| 在线观看国产午夜福利| 日本理论片午夜在线观看| 日韩成人中文字幕在线一区| 欧美国产极品一区二区| 国产欧美日韩一级小黄片| 亚洲国产精品肉丝袜久久| 久久精品中文字幕人妻中文| 亚洲熟妇熟女久久精品| 日韩欧美高清国内精品| 日本 一区二区 在线| 国产又粗又黄又爽又硬的| 成在线人免费视频一区二区| 亚洲内射人妻一区二区| 免费一级欧美大片免费看| 国产精品丝袜一二三区| 国产精品二区三区免费播放心| 隔壁的日本人妻中文字幕版| 在线观看免费视频你懂的| 国产成人一区二区三区久久| 日韩av亚洲一区二区三区| 激情图日韩精品中文字幕| 一本久道久久综合中文字幕| 在线视频三区日本精品| 伊人久久青草地综合婷婷| 老富婆找帅哥按摩抠逼视频| 91精品国产综合久久福利| 日本在线视频播放91| 视频一区中文字幕日韩| 在线免费观看一二区视频 | 人妻人妻人人妻人人澡| 亚洲国产一级片在线观看| 东京热男人的天堂久久综合| 久久成人国产欧美精品一区二区 | 日韩人妻一区二区欧美| 国产一级精品色特级色国产| 日本黄色美女日本黄色| 国内欲色一区二区三区| 国产精品亚洲一级av第二区| 91国自产精品中文字幕亚洲| 国产又粗又猛又大爽又黄同志|