Robofun 機器人論壇

標題: 請問如何用按鈕控制伺服馬達? [打印本頁]

作者: as6212as    時間: 2012-5-31 23:08
標題: 請問如何用按鈕控制伺服馬達?
我想要用按鈕來控制伺服馬達的動作
例如:
我現在有X、Z、Y三個伺服馬達跟A、B、C三個按鈕
現在按下A按鈕 X馬達轉向30度 Z馬達轉向150度 Y馬達無動作
接著按下B按紐 X馬達無動作 Z馬達跟Y馬達從30度到150度重複來回運轉
最後按下C按鈕 X馬達轉向150度 Z馬達轉向30度 Y馬達無動作
我目前在網路上只找到用按鈕控制LED 沒有如何控制伺服馬達...
另外按鈕一定要接一個10K的電阻嗎!?
謝謝大家的回答!
作者: as6212as    時間: 2012-6-2 22:40
我在網路上找的程式碼如下:
const int buttonPin = 2;     // 按鈕輸入至 pin 2
const int ledPin =  13;      // LED接至 pin 13
int buttonState = 0;         // 存放按鈕狀態
int old_buttonState = 0;     // 存放按鈕上一次的狀態
int ledState = 0;            // 存放LED狀態,0:關;1:亮

void setup() {
  pinMode(ledPin, OUTPUT);    //輸出   
  pinMode(buttonPin, INPUT);  //輸入   
}

void loop(){
  buttonState = digitalRead(buttonPin); //讀取按鈕的狀態
  if ((buttonState == HIGH) && (old_buttonState == LOW)) {     //假如按鈕是從斷開的情況下被按下時
    ledState = 1 - ledState;         //反置 LED 狀態
    delay(300); //抗雜訊,防手殘!
  }  
  
  old_buttonState == buttonState;  //把這次的按鈕狀態存起來供下次判斷

  if (ledState == 1) {
    digitalWrite(ledPin, HIGH);         //輸出高電位給LED
  }
  else {
    digitalWrite(ledPin, LOW);          //輸出低電位給LED
  }
}
所以我只要把
  if (ledState == 1) {
    digitalWrite(ledPin, HIGH);         //輸出高電位給LED
  }
  else {
    digitalWrite(ledPin, LOW);          //輸出低電位給LED
  }
改成
  if (ledState == 1) {
     R2.write(130);
         R1.write(60);
               delay(150);  
  }
  else {
      R1.write(130);
      delay(150);  
         R1.write(60);
               delay(150);
  }
這樣就行了!?(當然前面的宣告也會改)
作者: as6212as    時間: 2012-6-10 09:36

作者: a125125460    時間: 2012-6-10 12:58
本帖最後由 a125125460 於 2012-6-10 13:01 編輯

先恭喜你做出來了~
另外不接10k電阻也不會怎樣....
只不過你會發現你只要碰觸(並沒按下去),甚至連按都沒按.......
他就會開始自己跑了
by自己的經驗
好奇問一下...你伺服馬達的電源是怎麼配置的...我想作為參考用
作者: as6212as    時間: 2012-6-28 22:44
回復 4# a125125460


    另外接4顆4號電池
作者: k7860710970    時間: 2012-10-11 18:51
大大 可否告訴我你的馬達型號 和電路圖  我好想看 我現在卡在馬達角度控制




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2