查看: 20126|回复: 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!!!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    arduino IDE编译ESP8266代码出错
    arduino IDE编译ESP8266代
    昨天下午突然出现的bug,说我红框里那些变量都被提前声明过了(注意,是红框里每一个
    blinker做的卧室灯开关发现一个问题
    blinker做的卧室灯开关发
    做了一个卧室灯开关并安装到墙壁86盒中,实现了小爱同学,墙壁开关点动控制开关灯.看起
    Blinker项目实例:Nodemcu驱动ws2812(附项目代码)
    Blinker项目实例:Nodemcu
    !!!页面很难插入图片,完整请看附件!!!!!!页面很难插入图片,完整请看附件!
    arduino nano控制舵机
    arduino nano控制舵机
    使用arduino nano every 控制舵机按下SB1 舵机旋转90° 按下SB2 舵机复位 新人不是很
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表