Robofun 機器人論壇
標題:
請問關於按鈕開關控制馬達
[打印本頁]
作者:
ray41121
時間:
2012-7-27 22:14
標題:
請問關於按鈕開關控制馬達
本帖最後由 ray41121 於 2012-7-28 01:01 編輯
我想做一個按鈕開關來控制DC馬達
我利用按鈕加上 H橋來控制
一個按鈕沒問題,但加上第二個問題就來了
燒錄後馬達會照著第一個按鈕的程式碼跑 按按鈕才會停
第二個按鈕完全沒作用 想請問各位高手可以幫忙指點嗎?
我用的是MEGA 2560
這是程式碼:
const int motor1a = 4;
const int motor2a = 3;
const int e12 = 5;
const int motor3a = 8;
const int motor4a = 9;
const int e34 = 10;
long lastDebounceTime = 0;
long debounceDelay = 50;
void setup()
{
Serial.begin(115200);
pinMode(2, INPUT);
pinMode(6, INPUT);
pinMode(motor1a,OUTPUT);
pinMode(motor2a,OUTPUT);
pinMode(e12,OUTPUT);
pinMode(motor3a,OUTPUT);
pinMode(motor4a,OUTPUT);
pinMode(e34,OUTPUT);
digitalWrite(e12,HIGH);
digitalWrite(e34,HIGH);
}
void loop()
{
{
int switchStatus = digitalRead(2);
digitalWrite(motor1a, switchStatus);
digitalWrite(motor3a, switchStatus);
Serial.println(switchStatus);
forwar();
}
{
int switchStatus = digitalRead(6);
digitalWrite(motor2a, switchStatus);
digitalWrite(motor4a, switchStatus);
Serial.println(switchStatus);
back();
}
}
void forwar()
{
digitalWrite(motor1a,HIGH);
digitalWrite(motor2a,LOW);
digitalWrite(motor3a,HIGH);
digitalWrite(motor4a,LOW);
}
void back()
{
digitalWrite(motor1a,LOW);
digitalWrite(motor2a,HIGH);
digitalWrite(motor3a,LOW);
digitalWrite(motor4a,HIGH);
}
作者:
vegewell
時間:
2012-7-28 19:35
回復
1#
ray41121
你這個程式裡都沒有delay(),
一圈只能執行前幾個指令,
太快了,所以忽略後幾個指令.
作者:
ray41121
時間:
2012-7-28 19:49
我加delay()在
int switchStatus = digitalRead(2);
digitalWrite(motor1a, switchStatus);
digitalWrite(motor3a, switchStatus);
Serial.println(switchStatus);
forwar();
delay();
跟
int switchStatus = digitalRead(6);
digitalWrite(motor2a, switchStatus);
digitalWrite(motor4a, switchStatus);
Serial.println(switchStatus);
back();
delay();
結果變成一直自轉 沒辦法控制
作者:
ray41121
時間:
2012-7-28 19:55
我之後改成這樣
void loop()
{
{
int switchStatus = digitalRead(2);
digitalWrite(motor1a, switchStatus);
digitalWrite(motor3a, switchStatus);
Serial.println(switchStatus);
forwar();
}
{
int switchStatus = digitalRead(6);
digitalWrite(motor2a, switchStatus);
digitalWrite(motor4a, switchStatus);
Serial.println(switchStatus);
back();
}
return;
}
改成這樣之後就可以用兩個按鈕控制了
但是轉速變低了 是因為電壓不夠嗎?
作者:
vegewell
時間:
2012-7-28 20:10
回復
4#
ray41121
delay();
裡面要有數字
delay(10);
延遲10毫秒
作者:
vegewell
時間:
2012-7-28 20:27
回復
4#
ray41121
你這個程式forwar();之後馬上back();
相抵的結果轉速就變低了
作者:
vegewell
時間:
2012-7-28 20:47
回復
4#
ray41121
你在兩個按鈕都沒按的時候,
是要馬達正轉還是反轉?
作者:
ray41121
時間:
2012-7-28 22:22
我delay()裡面有打數字
那個只是範例
我兩個按鈕都沒按的時候是要靜止的
我打return上去之後是靜止的
但是轉速就變低了
作者:
vegewell
時間:
2012-7-29 04:12
回復
8#
ray41121
請試試改程式如下,看能不能轉快點:
---------------------------------------------
void setup()
{
Serial.begin(115200);
pinMode(2, INPUT);
pinMode(6, INPUT);
pinMode(motor1a,OUTPUT);
pinMode(motor2a,OUTPUT);
pinMode(e12,OUTPUT);
pinMode(motor3a,OUTPUT);
pinMode(motor4a,OUTPUT);
pinMode(e34,OUTPUT);
digitalWrite(e12,HIGH);
digitalWrite(e34,HIGH);
}
void loop()
{
{
int switchStatus = digitalRead(2);
digitalWrite(motor1a, switchStatus);
digitalWrite(motor3a, switchStatus);
Serial.println(switchStatus);
if (switchStatus == HIGH)
{
forwar();
delay(100);
return;
}
else {
digitalWrite(motor2a,LOW);
digitalWrite(motor4a,LOW);
}
}
{
int switchStatus = digitalRead(6);
digitalWrite(motor2a, switchStatus);
digitalWrite(motor4a, switchStatus);
Serial.println(switchStatus);
if (switchStatus == HIGH)
{
back();
delay(100);
return;
}
else {
digitalWrite(motor1a,LOW);
digitalWrite(motor3a,LOW);
}
}
return;
}
void forwar()
{
digitalWrite(motor1a,HIGH);
digitalWrite(motor2a,LOW);
digitalWrite(motor3a,HIGH);
digitalWrite(motor4a,LOW);
}
void back()
{
digitalWrite(motor1a,LOW);
digitalWrite(motor2a,HIGH);
digitalWrite(motor3a,LOW);
digitalWrite(motor4a,HIGH);
}
作者:
ray41121
時間:
2012-7-29 13:05
回復
9#
vegewell
我有燒錄了
但是第二顆按鈕沒動作了
作者:
vegewell
時間:
2012-7-29 17:10
回復
10#
ray41121
再試試 改如下:
void loop()
{
int switchStatus2 = digitalRead(2);
int switchStatus6 = digitalRead(6);
if (switchStatus2 == HIGH && switchStatus6 == LOW)
{
forwar();
delay(100);
}
if (switchStatus2 == LOW && switchStatus6 == LOW)
{
digitalWrite(motor1a,LOW);
digitalWrite(motor2a,LOW);
digitalWrite(motor3a,LOW);
digitalWrite(motor4a,LOW);
delay(100);
}
if (switchStatus6 == HIGH && switchStatus2 == LOW)
{
back();
delay(100);
}
}
void forwar()
{
digitalWrite(motor1a,HIGH);
digitalWrite(motor2a,LOW);
digitalWrite(motor3a,HIGH);
digitalWrite(motor4a,LOW);
}
void back()
{
digitalWrite(motor1a,LOW);
digitalWrite(motor2a,HIGH);
digitalWrite(motor3a,LOW);
digitalWrite(motor4a,HIGH);
}
作者:
ray41121
時間:
2012-7-29 20:36
回復
11#
vegewell
可以了!!
而且原本馬達有蜂鳴的聲音也沒了!
謝謝你
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2