极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 38910|回复: 20

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

[复制链接]
发表于 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加個下拉電阻吧~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-1 13:28:38 | 显示全部楼层
TTTTTTT33 发表于 2013-8-1 13:22
在lock和nolock加個下拉電阻吧~

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

使用道具 举报

发表于 2013-8-1 13:45:05 | 显示全部楼层
你是想按按钮a正转,按b反转是吧。
试试中断

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-1 13:48:04 | 显示全部楼层
qptimus 发表于 2013-8-1 13:45
你是想按按钮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);
     }

      
   }
           
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-1 13:57:30 | 显示全部楼层
TTTTTTT33 发表于 2013-8-1 13:52
nolock和lock初始你都給LOW吧,因為程式執行有先後順序,所以會一直執行第一個if跳不出來,所以會一直正轉, ...

恩,确实是遇到跳不出第一个if这个问题,我试试看
回复 支持 反对

使用道具 举报

发表于 2013-8-1 15:03:42 | 显示全部楼层
可以了嗎??我也想知道~~!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-1 16:08:56 | 显示全部楼层
TTTTTTT33 发表于 2013-8-1 15:03
可以了嗎??我也想知道~~!!

回家试试看{:soso_e120:}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-1 19:43:35 | 显示全部楼层
TTTTTTT33 发表于 2013-8-1 15:03
可以了嗎??我也想知道~~!!

刚试过,还是有问题,
按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);
}   
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-1 21:38:59 | 显示全部楼层
TTTTTTT33 发表于 2013-8-1 21:00
改這樣吧,第一個if是多餘的

int lock=3; //lock button3#

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

使用道具 举报

 楼主| 发表于 2013-8-1 21:43:14 | 显示全部楼层
TTTTTTT33 发表于 2013-8-1 20:56
馬達規格是..?? ARDUINOD可以驅動嗎??

普通直流电机,用红外可以控制正反转
回复 支持 反对

使用道具 举报

发表于 2013-8-1 22:00:33 | 显示全部楼层
使能端是???有些你們的用語我沒聽過~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-5 19:02 , Processed in 0.042037 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表