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
經過幾天的摸索 總算有些結果了
#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);
}
動作與想像一樣 接下要來要擴大按鈕數量
作者:
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