Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 10106|回復: 5
打印 上一主題 下一主題

請問如何用按鈕控制伺服馬達?

[複製鏈接]
跳轉到指定樓層
1#
發表於 2012-5-31 23:08:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我想要用按鈕來控制伺服馬達的動作
例如:
我現在有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的電阻嗎!?
謝謝大家的回答!
2#
 樓主| 發表於 2012-6-2 22:40:12 | 只看該作者
我在網路上找的程式碼如下:
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);
  }
這樣就行了!?(當然前面的宣告也會改)
3#
 樓主| 發表於 2012-6-10 09:36:25 | 只看該作者
  • 經過幾天的摸索 總算有些結果了








  • #include <Servo.h>
    Servo L1;
    Servo L2;
    Servo R1;
    Servo R2;

    int buttonAPin = 1;
    int buttonBPin = 2;
    int buttonCPin = 4;
    int buttonDPin = 6;
    int buttonEPin = 7;

    void setup() {
    pinMode(buttonAPin, INPUT);
    pinMode(buttonBPin, INPUT);
    pinMode(buttonCPin, INPUT);
    pinMode(buttonDPin, INPUT);
    pinMode(buttonEPin, INPUT);
    L1.attach(3);
    L2.attach(5);
    R1.attach(9);
    R2.attach(10);
    L1.write(130);
    L2.write(130);
    R1.write(130);
    R2.write(45);
    }

    void loop()
    {

    if ( digitalRead(buttonAPin) == HIGH) //A按紐按下 伺服馬達重複動作
    {
    for (int i = 0; i < 10; i++) {

    if( digitalRead(buttonBPin) == HIGH){ //B按紐按下 跳脫迴圈
    break;
    }
    if( digitalRead(buttonCPin) == HIGH){ //C按紐按下 跳脫迴圈
    break;
    }
    else{
    R2.write(130);
    R1.write(60);
    delay(150);
    R1.write(130);
    delay(150);
    R1.write(60);
    delay(150);
    R1.write(130);
    delay(100);
    R2.write(45);
    delay(1000);
    }
    }
    }

    if ( digitalRead(buttonBPin) == HIGH) {

    L1.write(90);
    L2.write(90);
    }

    if ( digitalRead(buttonCPin) == HIGH) {
    L1.write(130);
    L2.write(130);
    R1.write(130);
    R2.write(45);

    }






  • 動作與想像一樣 接下要來要擴大按鈕數量

4#
發表於 2012-6-10 12:58:31 | 只看該作者
本帖最後由 a125125460 於 2012-6-10 13:01 編輯

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


    另外接4顆4號電池
6#
發表於 2012-10-11 18:51:07 | 只看該作者
大大 可否告訴我你的馬達型號 和電路圖  我好想看 我現在卡在馬達角度控制
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-6-12 00:53 , Processed in 0.128596 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表