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.
Dependents: JetflyerMotorController
Brake.cpp
00001 #include "Brake.h" 00002 00003 Brake::Brake() : _brakeButton(PIN_BUTTON_BRAKE), _pwm(PIN_PWM_BRAKE), 00004 _dir(PIN_DIR_BRAKE) 00005 { 00006 _pwm.period_ms(20); //needs to be changed!!! 00007 Timer t1; 00008 Timer t2; 00009 t1.start(); 00010 percentage_old=0; 00011 int state_brakeButton_old=0; 00012 enable_drive =0; 00013 direction=1; // 1 forward, -1 backward 00014 } 00015 00016 Brake::~Brake() 00017 { 00018 00019 } 00020 00021 void Brake::calibrateServo() 00022 { 00023 00024 00025 } 00026 00027 00028 void Brake::brake(int percentage, int speed) 00029 { 00030 00031 00032 if(percentage != percentage_old) 00033 { 00034 enable_drive =1; 00035 00036 if(percentage_old < percentage) 00037 { 00038 direction = 1; // forward 00039 } 00040 else 00041 { 00042 direction = -1; // backward 00043 } 00044 00045 } 00046 00047 //////////// 00048 00049 if( state_brakeButton_old != _dir) 00050 { 00051 calculated_position=0; // recalibrate every time it switch state changes 00052 } 00053 00054 //////////////// 00055 00056 if( enable_drive == 1) 00057 { 00058 if( percentage == 0) 00059 { 00060 drive_homeposition(); 00061 } 00062 else 00063 { 00064 00065 drive_brake(direction, speed); 00066 diff_time = t1.read_ms() - ref_time; 00067 00068 00069 calculated_position = calculated_position + (((((float)speed)/100.0f)*MAX_SPEED_BRAKE* (((float)diff_time)/1000.0)*direction))/(MAX_ROTATIONS_FOR_BRAKEING); 00070 00071 //maximum speed 5 rpm 00072 00073 if( abs(calculated_position - percentage) < HYSTERESIS) 00074 { 00075 enable_drive =0; 00076 } 00077 } 00078 00079 } 00080 00081 00082 if(diff_time > 600000) // After 10 Minutes Timer is Reset, avoid overflow 00083 { 00084 t1.reset(); 00085 } 00086 00087 state_brakeButton_old = _dir; 00088 ref_time = t1.read_ms(); 00089 } 00090 00091 int Brake::drive_homeposition() 00092 { 00093 if( _brakeButton ) // check if 1 or 0 is engaged 00094 { 00095 drive_brake(-1, 100.0); 00096 } 00097 else 00098 { 00099 drive_brake(1, 0); // home position reached 00100 } 00101 00102 00103 } 00104 int Brake::drive_brake(int direction, int _speed) 00105 { 00106 _pwm.write(( float(abs(_speed)))/100.0f); 00107 00108 if(direction==1) 00109 { 00110 _dir = 1; // engage brakes 00111 } 00112 else 00113 { 00114 _dir = 0; // release brakes 00115 } 00116 } 00117 00118 bool Brake::getBrakeing() 00119 { 00120 return _brakeing; 00121 }
Generated on Tue Jul 12 2022 22:55:19 by
1.7.2