#ifndef MCOPY_PROJECTOR #define MCOPY_PROJECTOR #include #include /** * D2 X Step * D3 X Direction * D4 X MS1 setting * D5 X MS2 setting * D6 Y Step * D7 Y Direction * D8 Y MS1 setting * D9 Y MS2 setting * * MS1(X/Y) MS2(X/Y) Description * L L Full step * H L Half step * L H Quarter step * H H Eighth STEP **/ class McopyProjector { private: AccelStepper _takeup; AccelStepper _feed; const uint16_t _motorSteps = 200; //full steps const uint8_t _frames = 8; const uint16_t _stepsPerFrame = 25; //round(_motorSteps / _frames); const float _speed = 2000.0; volatile uint8_t _mode = 1; int64_t _posTakeup = 0; int64_t _posFeed = 0; //X uint8_t _takeupSettingA; uint8_t _takeupSettingB; //Y uint8_t _feedSettingA; uint8_t _feedSettingB; //X uint8_t _takeupEmitter; uint8_t _takeupReceiver; //Y uint8_t _feedEmitter; uint8_t _feedReceiver; long _feedSamples[200]; long _takeupSamples[200]; bool _dir = true; bool _running = false; bool _adjusting = false; long readVcc(); long analogReadAccurate (uint8_t &pin); long analogReadAccurateAverage (uint8_t &pin); uint16_t findPeak(long (&arr)[200], uint16_t &steps); void emitters(bool enabled); public: McopyProjector(AccelStepper takeup, AccelStepper feed, uint8_t takeupSettingA, uint8_t takeupSettingB, uint8_t feedSettingA, uint8_t feedSettingB, uint8_t takeupEmitter, uint8_t takeupReceiver, uint8_t feedEmitter, uint8_t feedReceiver); void begin(); //0 = takeup, 1 = feed void adjust(uint8_t motor, int64_t steps); void adjustBoth(int64_t steps); //true = forward, false = back void frame(bool dir); void setDirection(bool dir); void setStepperMode(uint8_t mode); void loop(); void home(); void firstPass(); void centerPass(); }; #endif