這一節其實是上一節經過完善的,本來那些函數都可以簡化為更簡單的函數的,改起來的也友善一下,你們可以自己嘗試。更改後的代碼,給了小車減速停供了一個更好的緩沖,大家可以自己對比,我也會在下面的代碼裡注明。
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;
}
}