nema17_neckZslave_FastAccel.ino (1532B)
1 #include "FastAccelStepper.h" 2 #include "Wire.h" 3 4 #define dirPinStepper 2 5 #define enablePinStepper 4 6 #define stepPinStepper 9 // OC1A in case of AVR 7 8 FastAccelStepperEngine engine = FastAccelStepperEngine(); 9 FastAccelStepper *stepper = NULL; 10 11 int i2cAddress = 0x20; 12 13 int gearRatio = (48 / 9); 14 int stepsPerRev = 200; 15 int microsteps = 16; 16 int stepperState = 0; 17 18 int formula = (microsteps * (gearRatio * stepsPerRev)); 19 20 void setup() { 21 Wire.begin(i2cAddress); 22 Wire.onReceive(receiveEvent); 23 24 engine.init(); 25 stepper = engine.stepperConnectToPin(stepPinStepper); 26 if (stepper) { 27 stepper->setDirectionPin(dirPinStepper); 28 stepper->setEnablePin(enablePinStepper); 29 stepper->setAutoEnable(true); 30 31 stepper->setSpeedInUs(30); // the parameter is us/step !!! 32 stepper->setAcceleration(20000); 33 } 34 } 35 36 void receiveEvent(int bytes) { 37 stepperState = Wire.read(); // read one character from the I2C 38 } 39 40 void loop() { 41 switch (stepperState) { 42 case 50: 43 stepper->move(0.05 * formula); 44 stepperState = 0; 45 break; 46 case 51: 47 stepper->move(-0.05 * formula); 48 stepperState = 0; 49 break; 50 case 52: 51 stepper->move(0.10 * formula); 52 stepperState = 0; 53 break; 54 case 53: 55 stepper->move(-0.10 * formula); 56 stepperState = 0; 57 break; 58 case 54: 59 stepper->move(0.2 * formula); 60 stepperState = 0; 61 break; 62 case 55: 63 stepper->move(-0.2 * formula); 64 stepperState = 0; 65 break; 66 break; 67 } 68 }