sunlong256 发表于 2017-8-16 20:18:06

arduino控制2个工业步进电机而且不用库

arduino控制2个工业步进电机而且不用库

/*without Delay
不使用delay函数来使一个连接在数字口的LED闪烁,这意味着别的代码可以同时执行,而不会被LED的代码打断。
*/
const int DianJi1 =2;
int DJ1State =LOW;             // 设置 LED状态
int dirPin1=3;
int DIR1=LOW;
const int DianJi2 =4;      
int DJ2State = LOW;             // 设置 LED状态
   int dirPin2=5;
   int DIR2=LOW;
long previous1 =0;      // 存储上一次LED状态改变的时间
long previous2 =0;
// 下面的变量是长整形,因为以us为单位测量的时间会快速地变成一个更大的,整形无法存储的数字。
long ShiJian1 =240 ;         // 设置间隔时间为240us
long ShiJian2 =500 ;         // 设置间隔时间为770us

void setup() {
pinMode(DianJi1, OUTPUT);   // 设置数字口输出
pinMode(dirPin1, OUTPUT);
pinMode(DianJi2, OUTPUT);   
pinMode(dirPin2, OUTPUT);
}

void loop(){

for(long i=0;i<50000;i++) { digitalWrite(dirPin1,HIGH);dianji1();   digitalWrite(dirPin2,HIGH);dianji2();   }
delay(1000);

for(long i=0;i<50000;i++) {digitalWrite(dirPin1,LOW);dianji1();    digitalWrite(dirPin2,LOW);dianji2();   }
delay(1000);

for(long i=0;i<50000;i++) { digitalWrite(dirPin1,HIGH); dianji1();}
delay(1000);
}

void dianji1(){   
unsigned long current = micros();
if(current - previous1 >= ShiJian1) {   // 检查是否到了亮灭灯的时间,也就是,如果现在和上一次亮灭灯的时间差比你设置的间隔时间大
      previous1 = current;   // 保存最后一次亮灯的时间
          if (DJ1State == LOW)    DJ1State = HIGH; // 如果LED灭了就点亮它 ,反之亦然:
          else                  DJ1State = LOW;
   digitalWrite(DianJi1, DJ1State);}   // 设置变量DJ1State为LED数字输入:
}

void dianji2(){
      unsigned long current = micros();
if(current - previous2 >= ShiJian2) {
    previous2 = current;   
          if (DJ2State == LOW)    DJ2State = HIGH;
          else                  DJ2State = LOW;
   digitalWrite(DianJi2, DJ2State);}    // 设置变量DJ1State为LED数字输入:
}

cityad 发表于 2017-9-5 17:00:35

:lol:lol感谢楼主分享!
页: [1]
查看完整版本: arduino控制2个工业步进电机而且不用库