程序一
int dirPin = 6;
int stepperPin = 5;
int potpin=0;
int val;
void setup()
{
pinMode(dirPin, OUTPUT);
pinMode(stepperPin, OUTPUT);
Serial.begin(9600);
}
void step(boolean dir,int steps)//Boolean 变量以 16 位(2 个字节)的数值形式存储,但只能是 True 或是 False
{
digitalWrite(dirPin,dir);
for(int i=0; i < steps; i ++)
{
val=analogRead(potpin);//判断语句,用于对电位器模拟值的分类
if(val<512)
{
val=map(val,0,512,200,800);
}
else
{
val=map(val,512,1023,800,200);
}
digitalWrite(stepperPin, HIGH);
delayMicroseconds(50);
digitalWrite(stepperPin, LOW);
delayMicroseconds(50);//生成周期为100的方波
// speed control
delayMicroseconds(val);//(改变这个值可以改变和改变对应的细分,可以变相应的转速)
}
}
void loop()
{
val = analogRead(potpin);
if(val < 512)
{
step(true,200 * 16);//每步趋近1.8度,例如(200*1)也就是指电机走一圈(360度),可以利用(200*n)来走n圈
}
else
{
step(false,200*16);
}
Serial.println(val);
}
程序二
int dirPin = 6;
int stepperPin = 5;
int potpin=0;
int val;
void setup()
{
pinMode(dirPin, OUTPUT);
pinMode(stepperPin, OUTPUT);
Serial.begin(9600);
}
void step(boolean dir,int steps)//Boolean 变量以 16 位(2 个字节)的数值形式存储,但只能是 True 或是 False
{
digitalWrite(dirPin,dir);
for(int i=0; i < steps; i ++)
{
val=analogRead(potpin);
int a=abs(val-512);
a=map(a,0,512,1000,200);
digitalWrite(stepperPin, HIGH);
delayMicroseconds(50);
digitalWrite(stepperPin, LOW);
delayMicroseconds(50);//生成周期为100的方波
// speed control
delayMicroseconds(a);//(改变这个值可以改变和改变对应的细分,可以变相应的转速)
}
}
void loop()
{
val = analogRead(potpin);
if(val < 512)
{
step(true,200 * 16);//每步趋近1.8度,例如(200*1)也就是指电机走一圈(360度),可以利用(200*n)来走n圈
}
else
{
step(false,200*16);
}
Serial.println(val);
}
以上两个程序原理上面一样,只是在数值对比时做了不同的变化。 |