查看: 18617|回复: 17

[已解决] 我想实现按键控制步进电机正反转

[复制链接]
  • TA的每日心情
    奋斗
    2015-8-4 11:09
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2015-7-13 10:37 | 显示全部楼层 |阅读模式
    int motorPin1 = 8;    // Blue   - 28BYJ48 pin 1
    int motorPin2 = 9;    // Pink   - 28BYJ48 pin 2
    int motorPin3 = 10;    // Yellow - 28BYJ48 pin 3
    int motorPin4 = 11;    // Orange - 28BYJ48 pin 4
                       // Red    - 28BYJ48 pin 5 (VCC)
    const int BUTTON=7;
    int val=0;
    int old_val=0;
    int state=0;
    int motorSpeed = 1200;  //variable to set stepper speed
    int count = 0;          // count of steps made
    int countsperrev = 512; // number of steps per full revolution
    int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
    //////////////////////////////////////////////////////////////////////////////
    void setup() {
      //declare the motor pins as outputs
      pinMode(motorPin1, OUTPUT);
      pinMode(motorPin2, OUTPUT);
      pinMode(motorPin3, OUTPUT);
      pinMode(motorPin4, OUTPUT);
       pinMode(BUTTON,INPUT);
      Serial.begin(9600);
    }
    //////////////////////////////////////////////////////////////////////////////
    void loop()
    {
      if(count <countsperrev )
        clockwise();
      else if (count == countsperrev * 6)
        count = 0;
      else
      anticlockwise();
         count++;

    }

    //////////////////////////////////////////////////////////////////////////////
    //set pins to ULN2003 high in sequence from 1 to 4
    //delay "motorSpeed" between each pin setting (to determine speed)
    void clockwise()
    { for(int j= 0;j<5;j++)
    {
      for(int i = 7; i >= 0; i--)
      {
        setOutput(i);
        delayMicroseconds(motorSpeed);
      }
    }
    }
    void anticlockwise()
    {
      
    { for(int i = 0; i < 8; i++)
      {
        setOutput(i);
        delayMicroseconds(motorSpeed);
      }
      }
    }

    void setOutput(int out)
      {
      digitalWrite(motorPin1, bitRead(lookup[out], 0));
      digitalWrite(motorPin2, bitRead(lookup[out], 1));
      digitalWrite(motorPin3, bitRead(lookup[out], 2));
      digitalWrite(motorPin4, bitRead(lookup[out], 3));
       }

    loop里怎么加上按键部分 还是另外编按键的子程序??这个按程序来应该是先正转5圈然后反转5圈
    但实际是先反转5圈然后又正转5圈。这2个大问题 求大神帮助!!我用的是UNO的板子
    按键定义7.
    就只有金钱28了 全给了。希望得到帮助!!!!1

  • TA的每日心情
    开心
    2015-9-22 09:46
  • 签到天数: 272 天

    [LV.8]以坛为家I

    发表于 2015-7-13 11:16 | 显示全部楼层

    回帖奖励 +1 金币

    不是很明白你提的问题。
    按我理解的题意:
    按下按钮,正转5圈,再按下按钮反转5圈....以此类推。

    按下按钮且正反转标记==FALSE;
    调用子程序→正转5圈
    正反转标记赋值为TRUE;

    再按下按钮且正反转标记==TRUE;
    调用子程序→反转5圈
    正反转标记赋值为FALSE;

  • TA的每日心情
    奋斗
    2015-8-4 11:09
  • 签到天数: 7 天

    [LV.3]偶尔看看II

     楼主| 发表于 2015-7-13 11:40 | 显示全部楼层
    袁培根 发表于 2015-7-13 11:16
    不是很明白你提的问题。
    按我理解的题意:
    按下按钮,正转5圈,再按下按钮反转5圈....以此类推。

    我目前是想实现按下按键电机正转5圈反转5圈后停止,再按下按键又实现正转5圈反转5圈后停止。我现在的程序是没有按键直接电机就是不停的正反转5圈。
  • TA的每日心情
    奋斗
    2015-8-4 11:09
  • 签到天数: 7 天

    [LV.3]偶尔看看II

     楼主| 发表于 2015-7-13 11:42 | 显示全部楼层
    袁培根 发表于 2015-7-13 11:16
    不是很明白你提的问题。
    按我理解的题意:
    按下按钮,正转5圈,再按下按钮反转5圈....以此类推。

    但是我实际上还有第二的问题就是上传没有加按键的程序后电机没有按照程序的要求先反转5圈再正转5圈,而是线反转5圈后又正转5圈。

    该用户从未签到

    发表于 2015-7-13 12:23 | 显示全部楼层
    步进电机的线接错了,把a+,b+的线和a-,b-的线调换一下
  • TA的每日心情
    奋斗
    2015-8-4 11:09
  • 签到天数: 7 天

    [LV.3]偶尔看看II

     楼主| 发表于 2015-7-13 12:35 | 显示全部楼层
    钟恒宇 发表于 2015-7-13 12:23
    步进电机的线接错了,把a+,b+的线和a-,b-的线调换一下

    按照你说的我把步进电机的4根接线的顺序倒过来接真的可以了。谢谢你
  • TA的每日心情
    奋斗
    2015-8-4 11:09
  • 签到天数: 7 天

    [LV.3]偶尔看看II

     楼主| 发表于 2015-7-13 12:38 | 显示全部楼层
    钟恒宇 发表于 2015-7-13 12:23
    步进电机的线接错了,把a+,b+的线和a-,b-的线调换一下

    我想请教你如何加一个按键 实现它一上电如果我没有按键的话 电机不转。我按下按键后电机就正转5圈反转5圈后停止呢 然后我再按按键它又正圈5圈反转5圈
  • TA的每日心情
    开心
    2015-9-22 09:46
  • 签到天数: 272 天

    [LV.8]以坛为家I

    发表于 2015-7-13 17:22 | 显示全部楼层
    void loop(){
         while(digitalRead(7)==LOW){}
         电机正转5圈,再反转5圈;
    }
    -------------------------------
    没有按下按钮时,一直在while空白代码里死循环
    按下按钮了,跳过死循环
    开始执行下边的语句
    执行完了,又回到死循环
  • TA的每日心情
    奋斗
    2015-8-4 11:09
  • 签到天数: 7 天

    [LV.3]偶尔看看II

     楼主| 发表于 2015-7-13 17:39 | 显示全部楼层
    袁培根 发表于 2015-7-13 17:22
    void loop(){
         while(digitalRead(7)==LOW){}
         电机正转5圈,再反转5圈;

    显示 while(digitalRead(7)==LOW)是lvalue required as left operand of assignment
    这个错误 无法编译 是不是要定义这个??
  • TA的每日心情
    奋斗
    2015-8-4 11:09
  • 签到天数: 7 天

    [LV.3]偶尔看看II

     楼主| 发表于 2015-7-14 08:35 | 显示全部楼层
    袁培根 发表于 2015-7-13 17:22
    void loop(){
         while(digitalRead(7)==LOW){}
         电机正转5圈,再反转5圈;

    目前我已经实现了我所需要的功能,那么问题又来了 我用的28byj-48这个步进电机 网上说它可以达到60圈/分
    我已经把int motorSpeed = 1200改成了int motorSpeed = 780;了再小电机就不转了  我还能怎么修改程序让电机的转速提高呢???3q!!!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    新手求教:用模拟口读取可调电阻的值
    新手求教:用模拟口读取可
    我想问的有以下两个问题: 1.如图,模拟口读取的是可调电阻至VCC一侧的模拟值,还是可
    【Arduino】108种传感器系列实验(37)---MQ-3酒精传感器模块
    【Arduino】108种传感器系
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    AI分拣系统
    AI分拣系统
    人工智能分拣系统 应用简介 在日常生活中,人们经常需要对物体进行分类,”材料分类
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表