guqi 发表于 2013-8-1 09:39:38

两个按键(微动不带自锁的)如控制直流电机正反转

RT:
使用的是arduino uno*1块
L298N*1块
直流电机*1个
按键*2个
程序如下,按下任意一个按键后,电机总是往一个方向转,各位大大看看这是什么问题,最好能给出参考程序^^

int lock=3; //lock button3#
int unlock=4;//unlock button4#
int pinI1=5;//定义I1接口5#
int pinI2=6;//定义I2接口6#

void setup()
{
pinMode(lock,INPUT);    //按钮lock端子作为输入
pinMode(unlock,INPUT); //按钮unlock端子作为输入
pinMode(pinI1,OUTPUT);
pinMode(pinI2,OUTPUT);

}
void loop()
{
if(digitalRead(lock)==LOW)//由于本例检测上升沿触发,所以先检测输入是否低电平,
{
    delay(10); //然后延时一段时间,
    if(digitalRead(lock)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
    {
   delay(500);
   digitalWrite(5,HIGH);//电机正转
   digitalWrite(6,LOW);
   delay(100);
   digitalWrite(5,LOW);//电机stop
   digitalWrite(6,LOW);
    }
   
}
if(digitalRead(unlock)==LOW)//由于本例检测上升沿触发,所以先检测输入是否低电平,
{
    delay(10); //然后延时一段时间,
    if(digitalRead(unlock)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
    {
   delay(500);
   digitalWrite(5,LOW);//电机反转
   digitalWrite(6,HIGH);
   delay(100);
   digitalWrite(5,LOW);//电机stop
   digitalWrite(6,LOW);
    }
      
}
}

隨風大俠 发表于 2013-8-1 13:22:55

在lock和nolock加個下拉電阻吧~

guqi 发表于 2013-8-1 13:28:38

TTTTTTT33 发表于 2013-8-1 13:22 static/image/common/back.gif
在lock和nolock加個下拉電阻吧~

下拉加了,硬件连接是参考http://www.geek-workshop.com/thread-1054-1-1.html;只是多增加了块电驱

qptimus 发表于 2013-8-1 13:45:05

你是想按按钮a正转,按b反转是吧。
试试中断

guqi 发表于 2013-8-1 13:48:04

qptimus 发表于 2013-8-1 13:45 static/image/common/back.gif
你是想按按钮a正转,按b反转是吧。
试试中断

恩是的,小弟初涉程序这块,大多都是在别人基础上改的,还请能详细点,谢谢

隨風大俠 发表于 2013-8-1 13:52:27

nolock和lock初始你都給LOW吧,因為程式執行有先後順序,所以會一直執行第一個if跳不出來,所以會一直正轉,你如果把程式上下對調應該換變一直反轉吧??

改成這樣試試看

int lock=3; //lock button3#
int unlock=4;//unlock button4#
int pinI1=5;//定义I1接口5#
int pinI2=6;//定义I2接口6#

void setup()
{
   pinMode(lock,INPUT);    //按钮lock端子作为输入
   pinMode(unlock,INPUT); //按钮unlock端子作为输入
   pinMode(pinI1,OUTPUT);
   pinMode(pinI2,OUTPUT);

}
void loop()
{
   if(digitalRead(lock)==LOW || digitalRead(unlock)==LOW)//由于本例检测上升沿触发,所以先检测输入是否低电平,
   {
   delay(10); //然后延时一段时间,
   if(digitalRead(lock)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
   {
      delay(500);
      digitalWrite(5,HIGH);//电机正转
      digitalWrite(6,LOW);
      delay(100);
      digitalWrite(5,LOW);//电机stop
      digitalWrite(6,LOW);
   }

else if(digitalRead(unlock)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
   {
      delay(500);
      digitalWrite(5,LOW);//电机反转
      digitalWrite(6,HIGH);
      delay(100);
      digitalWrite(5,LOW);//电机stop
      digitalWrite(6,LOW);
   }

      
   }
         

guqi 发表于 2013-8-1 13:57:30

TTTTTTT33 发表于 2013-8-1 13:52 static/image/common/back.gif
nolock和lock初始你都給LOW吧,因為程式執行有先後順序,所以會一直執行第一個if跳不出來,所以會一直正轉, ...

恩,确实是遇到跳不出第一个if这个问题:Q,我试试看:$

隨風大俠 发表于 2013-8-1 15:03:42

可以了嗎??我也想知道~~!!

guqi 发表于 2013-8-1 16:08:56

TTTTTTT33 发表于 2013-8-1 15:03 static/image/common/back.gif
可以了嗎??我也想知道~~!!

回家试试看{:soso_e120:}

guqi 发表于 2013-8-1 19:43:35

TTTTTTT33 发表于 2013-8-1 15:03 static/image/common/back.gif
可以了嗎??我也想知道~~!!

刚试过,还是有问题,
按3号按键时,电机正转,按4号键时,电机没有反应;
将程序改成
int lock=3; //lock button3#
int unlock=4;//unlock button4#
int pinI1=5;//定义I1接口5#
int pinI2=6;//定义I2接口6#

void setup()
{
   pinMode(lock,INPUT);    //按钮lock端子作为输入
   pinMode(unlock,INPUT); //按钮unlock端子作为输入
   pinMode(pinI1,OUTPUT);
   pinMode(pinI2,OUTPUT);

}
void loop()
{
   if(digitalRead(lock)==LOW || digitalRead(unlock)==LOW)//由于本例检测上升沿触发,所以先检测输入是否低电平,
   {
   delay(10); //然后延时一段时间,
   if(digitalRead(lock)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
   
   {
      delay(500);
      digitalWrite(5,LOW);//电机反转
      digitalWrite(6,HIGH);
      delay(100);
      digitalWrite(5,LOW);//电机stop
      digitalWrite(6,LOW);
   }

else if(digitalRead(unlock)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
   {
      delay(500);
      digitalWrite(5,HIGH);//电机正转
      digitalWrite(6,LOW);
      delay(100);
      digitalWrite(5,LOW);//电机stop
      digitalWrite(6,LOW);
   }

      
   }
}
后,按3按键,电机正转,按4号键电机没有反应;

希望一起在看下这是什么问题??

隨風大俠 发表于 2013-8-1 20:56:37

馬達規格是..?? ARDUINOD可以驅動嗎??

隨風大俠 发表于 2013-8-1 21:00:26

本帖最后由 TTTTTTT33 于 2013-8-1 21:34 编辑

改這樣吧,第一個if是多餘的

int lock=3; //lock button3#
int unlock=4;//unlock button4#
int pinI1=5;//定义I1接口5#
int pinI2=6;//定义I2接口6#

void setup()
{
    pinMode(lock,INPUT);    //按钮lock端子作为输入
    pinMode(unlock,INPUT); //按钮unlock端子作为输入
    pinMode(pinI1,OUTPUT);
    pinMode(pinI2,OUTPUT);

}
void loop()
{

      if(digitalRead(lock)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
      
      {
       delay(500);
       digitalWrite(5,LOW);//电机反转
       digitalWrite(6,HIGH);
       delay(100);
       digitalWrite(5,LOW);//电机stop
       digitalWrite(6,LOW);
      }

else if(digitalRead(unlock)==HIGH) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
      {
       delay(500);
       digitalWrite(5,HIGH);//电机正转
       digitalWrite(6,LOW);
       delay(100);
       digitalWrite(5,LOW);//电机stop
       digitalWrite(6,LOW);
      }

else
{
       digitalWrite(5,LOW);//电机stop
       digitalWrite(6,LOW);
}   
}

guqi 发表于 2013-8-1 21:38:59

TTTTTTT33 发表于 2013-8-1 21:00 static/image/common/back.gif
改這樣吧,第一個if是多餘的

int lock=3; //lock button3#


还是按任意一个键只往同一个方向转,是不是要把使能端也加进去?呢

guqi 发表于 2013-8-1 21:43:14

TTTTTTT33 发表于 2013-8-1 20:56 static/image/common/back.gif
馬達規格是..?? ARDUINOD可以驅動嗎??

普通直流电机,用红外可以控制正反转

隨風大俠 发表于 2013-8-1 22:00:33

使能端是???有些你們的用語我沒聽過~
页: [1] 2
查看完整版本: 两个按键(微动不带自锁的)如控制直流电机正反转