极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9041|回复: 0

参考迷你强的中断教程以后 步进电机还是会动

[复制链接]
发表于 2012-11-26 16:58:10 | 显示全部楼层 |阅读模式
本帖最后由 dbo 于 2012-11-26 16:59 编辑

线路也跟迷你强接的一模一样 按钮处也加了上拉电阻   当按钮按下时 步进电机还是转 只是转的极慢而已 板子用的是arduino duemilanove 中断教程的地址:http://www.geek-workshop.com/thread-1983-1-1.html
  1. int pbIn = 0;                  // 定义中断引脚为0,也就是D2引脚
  2. int ledOut = A0;                // 定义输出指示灯引脚
  3. volatile int state = LOW;      // 定义默认输入状态
  4. #define DIR_PIN_Y 4
  5. #define STEP_PIN_Y 5

  6. void setup()
  7. {               
  8.   pinMode(DIR_PIN_Y, OUTPUT);
  9.   pinMode(STEP_PIN_Y, OUTPUT);
  10.   // 置ledOut引脚为输出状态
  11.   pinMode(ledOut, OUTPUT);

  12.   // 监视中断输入引脚的变化
  13.   attachInterrupt(pbIn, stateChange, LOW);
  14. }

  15. void loop()                     
  16. {
  17.   // 模拟长时间运行的进程或复杂的任务。
  18.   for (int i = 0; i < 100; i++)
  19. {rotateDeg_Y(i,1);
  20. delay(2000);}
  21. }

  22. void stateChange()
  23. {
  24.   state = HIGH;
  25.   digitalWrite(ledOut, state);  
  26. }

  27. void rotateDeg_Y(float deg, float speed){
  28.   //rotate a specific number of degrees (negitive for reverse movement)
  29.   //speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
  30.   int dir = (deg > 0)? LOW:HIGH;
  31.   digitalWrite(DIR_PIN_Y,dir);

  32.   unsigned int steps = abs(deg)/(0.003125);
  33.   float usDelay = (1/speed) * 80;
  34.   for(int i=0; i < steps; i++){
  35.     digitalWrite(STEP_PIN_Y, HIGH);
  36.     delayMicroseconds(usDelay);
  37.     digitalWrite(STEP_PIN_Y, LOW);
  38.     delayMicroseconds(usDelay);
  39.   }
  40. }
复制代码
回复

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-2 19:05 , Processed in 0.044831 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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