Hi, Everyone:
I am new to arduino, I found "Arduino Encoder to Stepper Motor " on youtube, it's very similar as what I want to do, but the code is not complete!
1) arduino duemilanove
2) Adafruit Motor/Stepper/Servo Shield for Arduino kit - v1.0
3) Stepper motor (Connect to M3 & M4)
4) Encoder from old printer(connect to PIN2 & PIN3)
My questions:
how to declare "motor_step" & "motor_direction"?
INT motor_step=????
INT motor_direction=????
INT encoder_a=2;
INT encoder_b=3;
---------------------------------------------------
volatile long motor_position, encoder;
void setup () {
//set up the various outputs
pinMode (motor_step, OUTPUT);
pinMode (motor_direction, OUTPUT);
// then the encoder inputs
pinMode (encoder_a, INPUT);
pinMode (encoder_b, INPUT);
digitalWrite (encoder_a, HIGH);
digitalWrite (encoder_b, HIGH);
// encoder pin on interrupt 0 (pin 2)
attachInterrupt(0, encoderPinChangeA, CHANGE);
// encoder pin on interrupt 1 (pin 3)
attachInterrupt(1, encoderPinChangeB, CHANGE);
encoder = 0;
}
void loop() {
//do stuff dependent on encoder position here
//such as move a stepper motor to match encoder position
//if you want to make it 1:1 ensure the encoder res matches the motor res by dividing/multiplying
if (encoder > 0) { digitalWrite (motor_direction, HIGH);
digitalWrite (motor_step, HIGH);
digitalWrite (motor_step, LOW); _delay_us(200); motor_position++; encoder = 0; }
else if (encoder < 0) {
digitalWrite (motor_direction, LOW);
digitalWrite (motor_step, HIGH);
digitalWrite (motor_step, LOW); _delay_us(200);
motor_position--;
encoder = 0;
}}
void encoderPinChangeA() {
if (digitalRead(encoder_a)==digitalRead(encoder_b)) {
encoder--;
} else{
encoder++;
}
}
void encoderPinChangeB() {
if (digitalRead(encoder_a) != digitalRead(encoder_b)) {
encoder--;
} else { encoder++; }
}