天天看點

基于mega2560加ramsp1.4擴充闆的全向輪小車

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

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;

  }

}