beta1

Dependents:   Ex_Stepper

Fork of a4998 by Keegan Hu

Committer:
glintligo
Date:
Mon Jul 16 23:53:54 2018 +0000
Revision:
2:57c57267b1da
Parent:
1:209911ee18cd
Child:
3:9e9f3cd7fff0
beta1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
glintligo 0:173936452e07 1 #include "a4988.h"
glintligo 0:173936452e07 2 #include "mbed.h"
glintligo 0:173936452e07 3 Stepper::Stepper(PinName _en, PinName _stepPin, PinName _direction):en(_en),
glintligo 0:173936452e07 4 stepPin(_stepPin),
glintligo 0:173936452e07 5 direction(_direction)
glintligo 0:173936452e07 6 {
glintligo 0:173936452e07 7
glintligo 0:173936452e07 8 }
glintligo 0:173936452e07 9
glintligo 0:173936452e07 10 void Stepper::step(int dir, int frequency ,volatile int _remain)
glintligo 0:173936452e07 11 {
glintligo 0:173936452e07 12 if (dir == 1) {
glintligo 0:173936452e07 13 direction = 0;
glintligo 0:173936452e07 14 } else if (dir == 0) {
glintligo 0:173936452e07 15 direction = 1;
glintligo 0:173936452e07 16 }
glintligo 2:57c57267b1da 17 else
glintligo 2:57c57267b1da 18 {
glintligo 2:57c57267b1da 19 return;
glintligo 2:57c57267b1da 20 }
glintligo 0:173936452e07 21 remain = _remain;
glintligo 2:57c57267b1da 22 step_ticker.attach(callback(this, &Stepper::step_control),0.5/frequency);
glintligo 0:173936452e07 23 }
glintligo 0:173936452e07 24
glintligo 0:173936452e07 25 void Stepper::enable()
glintligo 0:173936452e07 26 {
glintligo 0:173936452e07 27 en = 0;
glintligo 0:173936452e07 28 }
glintligo 0:173936452e07 29
glintligo 0:173936452e07 30 void Stepper::disable()
glintligo 0:173936452e07 31 {
glintligo 0:173936452e07 32 en = 1;
glintligo 0:173936452e07 33 }
glintligo 0:173936452e07 34
glintligo 0:173936452e07 35 void Stepper::step_control()
glintligo 0:173936452e07 36 {
glintligo 2:57c57267b1da 37 if(remain <= 0)
glintligo 2:57c57267b1da 38 {
glintligo 2:57c57267b1da 39 step_ticker.detach();
glintligo 0:173936452e07 40 return;
glintligo 0:173936452e07 41 }
glintligo 0:173936452e07 42
glintligo 0:173936452e07 43 if(stepPin){
glintligo 0:173936452e07 44 stepPin = 0; //STEP 1->0
glintligo 0:173936452e07 45 remain--;
glintligo 0:173936452e07 46 }else{
glintligo 0:173936452e07 47 stepPin = 1; //STEP 0->1
glintligo 0:173936452e07 48 }
glintligo 0:173936452e07 49 }
glintligo 2:57c57267b1da 50
glintligo 2:57c57267b1da 51 void Stepper::longrun(int dir, int frequency)
glintligo 2:57c57267b1da 52 {
glintligo 2:57c57267b1da 53 if (dir == 1) {
glintligo 2:57c57267b1da 54 direction = 0;
glintligo 2:57c57267b1da 55 } else if (dir == 0) {
glintligo 2:57c57267b1da 56 direction = 1;
glintligo 2:57c57267b1da 57 }
glintligo 2:57c57267b1da 58 else
glintligo 2:57c57267b1da 59 {
glintligo 2:57c57267b1da 60 return;
glintligo 2:57c57267b1da 61 }
glintligo 2:57c57267b1da 62 step_ticker.attach(callback(this, &Stepper::run_control),0.5/frequency);
glintligo 2:57c57267b1da 63 }
glintligo 2:57c57267b1da 64
glintligo 2:57c57267b1da 65 void Stepper::run_control()
glintligo 2:57c57267b1da 66 {
glintligo 2:57c57267b1da 67 if(stepPin){
glintligo 2:57c57267b1da 68 stepPin = 0; //STEP 1->0
glintligo 2:57c57267b1da 69 remain--;
glintligo 2:57c57267b1da 70 }else{
glintligo 2:57c57267b1da 71 stepPin = 1; //STEP 0->1
glintligo 2:57c57267b1da 72 }
glintligo 2:57c57267b1da 73 }
glintligo 2:57c57267b1da 74 void Stepper::stoprun()
glintligo 2:57c57267b1da 75 {
glintligo 2:57c57267b1da 76 step_ticker.detach();
glintligo 2:57c57267b1da 77 }