这一节其实是上一节经过完善的,本来那些函数都可以简化为更简单的函数的,改起来的也方便一下,你们可以自己尝试。更改后的代码,给了小车减速停供了一个更好的缓冲,大家可以自己对比,我也会在下面的代码里注明。
int Xstept_Pin=54;
int XDir_Pin=55;
int XEN_Pin=38;
int Ystept_Pin=60;
int YDir_Pin=61;
int YEN_Pin=56;
int Zstept_Pin=46;
int ZDir_Pin=48;
int ZEN_Pin=62; void setup()
{
Serial2.begin(9600);
Serial2.println("Ready!GO!");
pinMode(Xstept_Pin,OUTPUT);
pinMode(XDir_Pin,OUTPUT);
pinMode(XEN_Pin,OUTPUT);
pinMode(Ystept_Pin,OUTPUT);
pinMode(YDir_Pin,OUTPUT);
pinMode(YEN_Pin,OUTPUT);
pinMode(Zstept_Pin,OUTPUT);
pinMode(ZDir_Pin,OUTPUT);
pinMode(ZEN_Pin,OUTPUT);
digitalWrite(XEN_Pin,LOW);
digitalWrite(YEN_Pin,LOW);
digitalWrite(ZEN_Pin,LOW); }
void loop()
{
char signal;
if(Serial2.available())
{
signal=Serial2.read();
switch(signal)
{
case 'X':
Xforward();break;
case 'x':
Xback();break;
case 'Y':
Yforward();break;
case 'y':
Yback();break;
case 'Z':
Zforward();break;
case 'z':
Zback();break;
case 's':
stop();break;
case 'L':
turnleft();break;
case 'R':
turnright();break;
}
}
digitalWrite(XDir_Pin,LOW);//此处为添加的代码
digitalWrite(YDir_Pin,LOW);
digitalWrite(ZDir_Pin,LOW);
for(int i=0;i<=100;i++)
{
digitalWrite(Ystept_Pin,LOW);
digitalWrite(Xstept_Pin,LOW);
digitalWrite(Zstept_Pin,LOW);
delayMicroseconds(100);
digitalWrite(Xstept_Pin,LOW);
digitalWrite(Zstept_Pin,LOW);
digitalWrite(Ystept_Pin,LOW);
delayMicroseconds(150);
}
}
void Xforward()
{
digitalWrite(ZDir_Pin,LOW);
digitalWrite(YDir_Pin,HIGH);
for(int i=0;i<=100000;i++)
{ digitalWrite(Zstept_Pin,HIGH);
digitalWrite(Ystept_Pin,HIGH);
delayMicroseconds(80);
digitalWrite(Zstept_Pin,LOW);
digitalWrite(Ystept_Pin,LOW);
delayMicroseconds(80);
if(Serial2.available())
break;
}
}
void Xback()
{
digitalWrite(ZDir_Pin,HIGH);
digitalWrite(YDir_Pin,LOW);
for(int i=0;i<=100000;i++)
{
digitalWrite(Zstept_Pin,HIGH);
digitalWrite(Ystept_Pin,HIGH);
delayMicroseconds(80);
digitalWrite(Zstept_Pin,LOW);
digitalWrite(Ystept_Pin,LOW);
delayMicroseconds(80);
if(Serial2.available())
break;
}
}
void turnleft()
{
digitalWrite(XDir_Pin,HIGH);
digitalWrite(YDir_Pin,HIGH);
digitalWrite(ZDir_Pin,HIGH);
for(int i=0;i<=100000;i++)
{
digitalWrite(Zstept_Pin,HIGH);
digitalWrite(Ystept_Pin,HIGH);
digitalWrite(Xstept_Pin,HIGH);
delayMicroseconds(80);
digitalWrite(Zstept_Pin,LOW);
digitalWrite(Ystept_Pin,LOW);
digitalWrite(Xstept_Pin,LOW);
delayMicroseconds(80);
if(Serial2.available())
break;
}
}
void turnright()
{
digitalWrite(XDir_Pin,LOW);
digitalWrite(YDir_Pin,LOW);
digitalWrite(ZDir_Pin,LOW);
for(int i=0;i<=100000;i++)
{
digitalWrite(Zstept_Pin,HIGH);
digitalWrite(Ystept_Pin,HIGH);
digitalWrite(Xstept_Pin,HIGH);
delayMicroseconds(80);
digitalWrite(Zstept_Pin,LOW);
digitalWrite(Ystept_Pin,LOW);
digitalWrite(Xstept_Pin,LOW);
delayMicroseconds(80);
if(Serial2.available())
break;
}
}
void Zforward()
{
digitalWrite(XDir_Pin,HIGH);
digitalWrite(YDir_Pin,LOW);
for(int i=0;i<=100000;i++)
{
digitalWrite(Xstept_Pin,HIGH);
digitalWrite(Ystept_Pin,HIGH);
delayMicroseconds(80);
digitalWrite(Xstept_Pin,LOW);
digitalWrite(Ystept_Pin,LOW);
delayMicroseconds(80);
if(Serial2.available())
break;
}
}
void Zback()
{
digitalWrite(XDir_Pin,LOW);
digitalWrite(YDir_Pin,HIGH);
for(int i=0;i<=100000;i++)
{
digitalWrite(Xstept_Pin,HIGH);
digitalWrite(Ystept_Pin,HIGH);
delayMicroseconds(80);
digitalWrite(Xstept_Pin,LOW);
digitalWrite(Ystept_Pin,LOW);
delayMicroseconds(80);
if(Serial2.available())
break;
}
}
void Yforward()
{
digitalWrite(XDir_Pin,HIGH);
digitalWrite(ZDir_Pin,LOW);
for(int i=0;i<=100000;i++)
{
digitalWrite(Xstept_Pin,HIGH);
digitalWrite(Zstept_Pin,HIGH);
delayMicroseconds(80);
digitalWrite(Xstept_Pin,LOW);
digitalWrite(Zstept_Pin,LOW);
delayMicroseconds(80);
if(Serial2.available())
break;
}
} void Yback()
{
digitalWrite(XDir_Pin,LOW);
digitalWrite(ZDir_Pin,HIGH);
for(int i=0;i<=100000;i++)
{
digitalWrite(Xstept_Pin,HIGH);
digitalWrite(Zstept_Pin,HIGH);
delayMicroseconds(80);
digitalWrite(Xstept_Pin,LOW);
digitalWrite(Zstept_Pin,LOW);
delayMicroseconds(80);
if(Serial2.available())
break;
}
}
void stop()
{
digitalWrite(XDir_Pin,LOW);
digitalWrite(ZDir_Pin,HIGH);
for(int i=0;i<=100000;i++)
{
digitalWrite(Xstept_Pin,LOW);
digitalWrite(Zstept_Pin,LOW);
delayMicroseconds(80);
digitalWrite(Xstept_Pin,LOW);
digitalWrite(Zstept_Pin,LOW);
delayMicroseconds(80);
if(Serial2.available())
break;
}
}