Thursday 9 February 2012

XYZ exerciser program

In case anyone finds it useful, here's the program I wrote / amended to "exercise" the 3 axes. The pin connections match the single-arduino setup for the final program so you won't need to rearrange them later:

// remember to select com port & board - ladyada adafruit is atmega168
// Stepper X
#define gndPinX 0
#define stepPinX 2
#define dirPinX 3
#define minPinX 4
#define maxPinX 9

// Stepper Y
#define gndPinY 0
#define stepPinY 10
#define dirPinY 7
#define minPinY 8
#define maxPinY 13

// Stepper Z
#define gndPinZ 0
#define stepPinZ 19 // a5 (a0 = d14)
#define dirPinZ 18 // a4
#define minPinZ 17 // a3
#define maxPinZ 16 // a2

void setup() {
Serial.begin(9600);
Serial.println("Starting stepper exerciser.");

pinMode(stepPinX, OUTPUT);
pinMode(stepPinY, OUTPUT);
pinMode(stepPinZ, OUTPUT);

pinMode(dirPinX, OUTPUT);
pinMode(dirPinY, OUTPUT);
pinMode(dirPinZ, OUTPUT);

digitalWrite( dirPinX, HIGH );
digitalWrite( dirPinY, HIGH );
digitalWrite( dirPinZ, HIGH );
digitalWrite(stepPinX, LOW );
digitalWrite(stepPinY, LOW );
digitalWrite(stepPinZ, LOW );
}

void loop() {
int i, j;

// for (i=1000; i>=200; i-=100) {
while( true ) {
i = 400;
Serial.print("Speed: ");
Serial.println(i);

for (j=0; j<6000; j++) {
digitalWrite(stepPinX, HIGH);
digitalWrite(stepPinY, HIGH);
digitalWrite(stepPinZ, HIGH);
delayMicroseconds(i);
digitalWrite(stepPinX, LOW);
digitalWrite(stepPinY, LOW);
digitalWrite(stepPinZ, LOW);
delayMicroseconds(i);
}

delay(500);
digitalWrite(dirPinX, !digitalRead(dirPinX));
digitalWrite(dirPinY, !digitalRead(dirPinY));
digitalWrite(dirPinZ, !digitalRead(dirPinZ));

for (j=0; j<6000; j++) {
digitalWrite(stepPinX, HIGH);
digitalWrite(stepPinY, HIGH);
digitalWrite(stepPinZ, HIGH);
delayMicroseconds(i);
digitalWrite(stepPinX, LOW);
digitalWrite(stepPinY, LOW);
digitalWrite(stepPinZ, LOW);
delayMicroseconds(i);
}

delay(1000);
Serial.println("Switching directions.");
digitalWrite(dirPinX, !digitalRead(dirPinX));
digitalWrite(dirPinY, !digitalRead(dirPinY));
digitalWrite(dirPinZ, !digitalRead(dirPinZ));
}
}

No comments:

Post a Comment