Wiki

Reso-nance numérique | Arts et cultures libres

Outils du site


Panneau latéral

materiel:uln2003:accueil

Ceci est une ancienne révision du document !


Table des matières

ULN2003

StepperMotor LIB

#ifndef Stepper_h
#define Stepper_h
 
class StepperMotor {
public:
    StepperMotor(int In1, int In2, int In3, int In4);    // Constructor that will set the inputs
    void setStepDuration(int duration);    // Function used to set the step duration in ms
    void step(int noOfSteps);    // Step a certain number of steps. + for one way and - for the other
 
    int duration;    // Step duration in ms
    int inputPins[4];    // The input pin numbers
};
 
#endif
// StepperMotor.cpp
#include <Arduino.h>
#include <StepperMotor.h>
 
StepperMotor::StepperMotor(int In1, int In2, int In3, int In4){
    // Record pin numbers in the inputPins array
    this->inputPins[0] = In1;
    this->inputPins[1] = In2;
    this->inputPins[2] = In3;
    this->inputPins[3] = In4;
 
    // Iterate through the inputPins array, setting each one to output mode
    for(int inputCount = 0; inputCount < 4; inputCount++){
        pinMode(this->inputPins[inputCount], OUTPUT);
    }
    duration = 50;
}
 
void StepperMotor::setStepDuration(int duration){
    this->duration = duration;
}
 
void StepperMotor::step(int noOfSteps){
    /*
        The following 2D array represents the sequence that must be
        used to acheive rotation. The rows correspond to each step, and
        the columns correspond to each input. L
    */
    bool sequence[][4] = {{LOW, LOW, LOW, HIGH },
                          {LOW, LOW, HIGH, HIGH},
                          {LOW, LOW, HIGH, LOW },
                          {LOW, HIGH, HIGH, LOW},
                          {LOW, HIGH, LOW, LOW },
                          {HIGH, HIGH, LOW, LOW},
                          {HIGH, LOW, LOW, LOW },
                          {HIGH, LOW, LOW, HIGH}};
 
    int factor = abs(noOfSteps) / noOfSteps;    // If noOfSteps is +, factor = 1. If noOfSteps is -, factor = -1 
    noOfSteps = abs(noOfSteps);    // If noOfSteps was in fact negative, make positive for future operations
 
    /* 
        The following algorithm runs through the sequence the specified number 
        of times
    */
    for(int sequenceNum = 0;  sequenceNum <= noOfSteps/8; sequenceNum++){
        for(int position = 0; ( position < 8 ) && ( position < ( noOfSteps - sequenceNum*8 )); position++){
            delay(duration);
            for(int inputCount = 0; inputCount < 4; inputCount++){
                digitalWrite(this->inputPins[inputCount], sequence[(int)(3.5 - (3.5*factor) + (factor*position))][inputCount]);
            }
        } 
    }
}
#include <StepperMotor.h>
 
StepperMotor motor1(8,9,10,11);
StepperMotor motor2(4,5,6,7);
 
void setup(){
  Serial.begin(9600);
  motor1.setStepDuration(1);
  motor2.setStepDuration(1);
}
 
void loop(){
  motor1.step(1000);
  motor2.step(1000);
  delay(2000);
  motor1.step(-1000);
  motor2.step(-1000);
  delay(2000);
/home/resonancg/www/wiki/data/attic/materiel/uln2003/accueil.1521126200.txt.gz · Dernière modification: 2018/03/15 16:03 de resonance