Control an H-Bridge using a PwmOut (enable) and two DigitalOuts (direction select). (forked from simon/Motor and changed according to our needs)
Fork of Motor by
Motor.cpp
00001 /* mbed simple H-bridge motor controller 00002 * Copyright (c) 2007-2010, sford, http://mbed.org 00003 * 00004 * Permission is hereby granted, free of charge, to any person obtaining a copy 00005 * of this software and associated documentation files (the "Software"), to deal 00006 * in the Software without restriction, including without limitation the rights 00007 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 00008 * copies of the Software, and to permit persons to whom the Software is 00009 * furnished to do so, subject to the following conditions: 00010 * 00011 * The above copyright notice and this permission notice shall be included in 00012 * all copies or substantial portions of the Software. 00013 * 00014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00015 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00016 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00017 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00018 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00019 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00020 * THE SOFTWARE. 00021 */ 00022 00023 #include "Motor.h" 00024 00025 #include "mbed.h" 00026 00027 Motor::Motor(PinName en, PinName fwd, PinName rev): 00028 _en(en), _fwd(fwd), _rev(rev) { 00029 00030 // Set initial condition for the enable pin 00031 _en = 0; 00032 00033 // Initial condition of output enables 00034 _fwd = 0; 00035 _rev = 0; 00036 } 00037 00038 // direct the motor in a specific direction or stop it 00039 void Motor::direct(int dir) { 00040 _fwd = (dir > 0); 00041 _rev = (dir < 0); 00042 _en = !(dir == 0); 00043 } 00044 00045 /* emulate pwm for a specified time interval */ 00046 void Motor::speed(float timeval, float speed) { 00047 float wait_time = 1/(speed * 10); 00048 for (int i = 0; i < timeval; i += 0.1 ) { 00049 _en = 0; 00050 wait(wait_time/2); 00051 _en = 1; 00052 wait(wait_time); 00053 } 00054 00055 } 00056 00057 mState Motor::getState() 00058 { 00059 mState temp = { _en, _fwd, _rev }; 00060 return temp; 00061 } 00062 00063 void Motor::setState(mState pinState) 00064 { 00065 _en = pinState.en; 00066 _fwd = pinState.fwd; 00067 _rev = pinState.rev; 00068 } 00069
Generated on Sun Jul 17 2022 01:14:24 by 1.7.2