|
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数字输入:
} |
|