Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
stepperMotor.h
00001 00002 #ifndef Stepper_H 00003 #define Stepper_H 00004 00005 #include "mbed.h" 00006 #define Front 1 00007 #define Back 2 00008 #define Stop 3 00009 #define Servo 4 00010 #define OFF 0 00011 #define ON 1 00012 00013 int step[4] = {0,1,3,2}; 00014 00015 class Stepper 00016 { 00017 protected : 00018 PinName Pin[2]; 00019 float bias; 00020 Stepper& operator=(const Motor &m) { 00021 return *this; 00022 } 00023 00024 public: 00025 00026 Stepper(PinName _pin1, PinName _pin2) : input(_pin1,_pin2) { 00027 Max = 0; 00028 state = Stop; 00029 pulse = 0; 00030 Step = 0; 00031 intervalTime = 0.1; 00032 start(); 00033 time = 0; 00034 } 00035 00036 00037 Stepper& operator= (float duty) { 00038 if(duty<-0.01F) 00039 { 00040 duty = -0.01 / duty; 00041 run(Back,duty); 00042 } 00043 else if(float(duty)>0.01F) 00044 { 00045 duty = 0.01 / duty; 00046 run(Front,duty); 00047 } 00048 else run(Stop,0); 00049 return *this; 00050 } 00051 void start() { 00052 tick.attach(this,&Stepper::interval,0.01); 00053 00054 } 00055 void run(int i,float duty) { 00056 intervalTime = duty; 00057 state = i; 00058 } 00059 float min,max; 00060 void setbias_motor(float b) { 00061 bias=b; 00062 } 00063 void duty_max(float Max) { 00064 max=Max; 00065 } 00066 void duty_min(float Min) { 00067 min=Min; 00068 } 00069 void setTarget(int tar) 00070 { 00071 target = tar; 00072 } 00073 int enable; 00074 int state; 00075 int target; 00076 float Max; 00077 bool finished; 00078 int Step; 00079 float angle; 00080 int pulse; 00081 int targetPulse; 00082 float intervalTime; 00083 BusOut input; 00084 Ticker tick; 00085 double time; 00086 void interval() { 00087 /*if(enable == OFF) 00088 { 00089 return; 00090 }*/ 00091 time = time + 0.01; 00092 if(intervalTime < time) { 00093 time = 0; 00094 if(state == Front) { 00095 Step++; 00096 if(Step>=4)Step = 0; 00097 input = step[Step]; 00098 pulse++; 00099 00100 //printf("%d %d ",step[Step],Step); 00101 } 00102 if(state == Back) { 00103 Step--; 00104 if(Step<=-1)Step = 3; 00105 input = step[Step]; 00106 pulse--; 00107 } 00108 if(state == Servo) { 00109 if(pulse < target) { 00110 Step++; 00111 if(Step>=4)Step = 0; 00112 input = step[Step]; 00113 pulse++; 00114 00115 //printf("%d %d ",step[Step],Step); 00116 } 00117 if(pulse > target) { 00118 Step--; 00119 if(Step<=-1)Step = 3; 00120 input = step[Step]; 00121 pulse--; 00122 } 00123 } 00124 } 00125 } 00126 }; 00127 00128 #endif /* PID_H */
Generated on Fri Jul 15 2022 08:29:11 by
1.7.2