• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

按键电机正反转如何让电机开机不转?

crustycrab 2017-06-05 浏览量:1212
用L298N按键控制电机正反转,以下代码已能够实现,按一下正转,按一下反转,现在出现的问题是,if语句会造成开机就正转,如何实现通电开机电机不转,按下按键才正转?在此求助大家,十分感谢!


[kenrobot_code]#define BUTTON 2    //定义按钮开关引脚为12
int input1 = 5; // 定义uno的pin 5 向 input1 输出   
int input2 = 6; // 定义uno的pin 6 向 input2 输出 
int val = 0;        //变量val用来储存按钮状态
int old_val = 0;    //暂存val变量的上一个时间单位
int state = 0;       //0表示关闭,1表示打开
void setup(){
  pinMode (BUTTON,INPUT);   //设定按钮引脚为输入状态
  pinMode(input1,OUTPUT);  
  pinMode(input2,OUTPUT); 
}
void loop(){
  val = digitalRead(BUTTON); //读取按钮状态并储存
   //检查按钮的变化情况
    if((val == HIGH)&&(old_val == LOW))
    {
    state =1-state;
    delay(20);              //延时简单抗抖动
     }
     old_val = val;            //val下载已经是旧的了,让我们暂存一下
    if (state == 1)
     {
      //电机正转
    digitalWrite(input1,HIGH); //给高电平
    digitalWrite(input2,LOW);  //给低电平    
      }
    else
     {
       //电机反转
    digitalWrite(input1,LOW); //给高电平   
    digitalWrite(input2,HIGH);  //给低电平  
     }
  
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 个人认为增加一个全局变量判断是不是初始化状态并稍微改动一下主函数就可以啦


    int int_state = 0;       //0表示初始,1表示已经工作了

    void loop(){
      val = digitalRead(BUTTON); //读取按钮状态并储存
       //检查按钮的变化情况
       if(val==0&&old_val==0&&int_state==0)

    {

    digitalWrite(input1,LOW); 

        digitalWrite(input2,LOW);  //给低电平 

    }


    else if((val == HIGH)&&(old_val == LOW))
        {
        state =1-state;
        delay(20);              //延时简单抗抖动

       int_state=1;
         }
         old_val = val;            //val下载已经是旧的了,让我们暂存一下
        if (state == 1&&int_state==1)
         {
          //电机正转
        digitalWrite(input1,HIGH); //给高电平
        digitalWrite(input2,LOW);  //给低电平    
          }
        else if (state == 0&&int_state==1)
         {
           //电机反转
        digitalWrite(input1,LOW); //给高电平   
        digitalWrite(input2,HIGH);  //给低电平  
         }  

    else

    {

    digitalWrite(input1,LOW); 

        digitalWrite(input2,LOW);  //给低电平 


    }




    • 发布于 2017-06-05
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:4
  • 这个模块是只要通电它就能运转,因此建议你额外加一个开关控制的电路,能够控制LN298的开与断
    • 发布于2017-06-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 增加一个按键扫描的函数就可以了
    • 发布于2017-06-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 其實L298N模塊上有ENA和ENB唷,您只要多增加以下

    void setup(){
      pinMode (BUTTON,INPUT);   //设定按钮引脚为输入状态
      pinMode(input1,OUTPUT);  
      pinMode(input2,OUTPUT); 
      pinMode(ENA,OUTPUT);  
      pinMode(ENB,OUTPUT); 
    }
    然後最內層的判斷句

        if (state == 1&&int_state==1)
         {
             //电机正转
            digitalWrite(ENA,HIGH); //给高电平
            digitalWrite(ENB,HIGH); //给高电平
            digitalWrite(input1,HIGH); //给高电平
           digitalWrite(input2,LOW);  //给低电平    
         }
        else if (state == 0&&int_state==1)
        {
           //电机反转
            digitalWrite(ENA,HIGH); //给高电平
            digitalWrite(ENB,HIGH); //给高电平
           digitalWrite(input1,LOW); //给高电平   
          digitalWrite(input2,HIGH);  //给低电平  
        }  
        else
        {
            digitalWrite(ENA,LOW); //给低电平
            digitalWrite(ENB,LOW); //给低电平
           //輸入PIN don't care
        }
    以上

    • 发布于2017-06-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 在你的初始化setup()里,增加两句,分别使input1和input2为低电平(按照说明理论上同时给高电平也是可以的),电机上电应该就会先不转,按键后再开始转。

    digitalWrite(input1,LOW);  //给低电平

    digitalWrite(input2,LOW);  //给低电平

    • 发布于2017-06-06
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

按键电机正反转如何让电机开机不转?