极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9868|回复: 5

怎样控制电机的运动?

[复制链接]
发表于 2014-6-8 10:17:14 | 显示全部楼层 |阅读模式
我已经有了前进、后退、停止的子函数了,怎样用arduino控制电机的前进几秒、后退几秒、停止,关键是停止,动起来容易,但好像停不下来{:soso_e115:} 。。求助大神解析!!
另外millis()函数怎么用啊?是从启动程序就开始计时,还是程序运行到这一行才开始计时?我上面这个问题可以用millis()解决吗?困惑了我好几天了,求解!!!谢谢.......
回复

使用道具 举报

 楼主| 发表于 2014-6-8 10:23:16 | 显示全部楼层
补充下:我是看了《爱上Arduino》第2版这本书p55-56,于是想到了能不能用millis()..大概想法就是如果读取的数据过了多少毫秒仍然没变,就执行相应的语句。
回复 支持 反对

使用道具 举报

发表于 2014-6-8 10:41:53 | 显示全部楼层
millis()函数是上电就开始计时的。
你的问题通过delay来实现吧,例如前进两秒,则先调用前进子程序,然后delay延时2秒钟,最后调用停止子程序,让电机停止旋转。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-8 11:40:43 | 显示全部楼层
nust_奔跑 发表于 2014-6-8 10:41
millis()函数是上电就开始计时的。
你的问题通过delay来实现吧,例如前进两秒,则先调用前进子程序,然后d ...

我是有个if条件,我把直滑式电阻器分成3部分,0~341,341~682,682~1023.如果读取的数据小于341,就执行前进一段时间t,后退两秒,前进两秒,再后退一段时间t,最后停止。它是能够完成上述的动作,但停止没用,注意到没?它一直在循环这几个动作,但我只要一次这样的动作。。
   if(val< 341){
    t=0.0088*(341-val);//时间单位为S,所以下面delay()里面的时间乘了1000
    qianjin();
    delay(t*1000+1000);
    houtui();
    delay(1000);
    qianjin();
    delay(1000);
    houtui();
    delay(t*1000+1000);
    if(millis()-startTime<=5000)
    tingzhi();
    }    一段程序。。。希望大神解析,改正
回复 支持 反对

使用道具 举报

发表于 2014-6-9 00:28:19 | 显示全部楼层
因為 if(millis()-startTime<=5000)不會為真
所以不會執行 tingzhi();

把5000改成50000試試
回复 支持 反对

使用道具 举报

发表于 2014-6-9 10:34:46 | 显示全部楼层
楼上正解
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 10:58 , Processed in 0.036370 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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