speedservo

Dependents:   nhk_auto_06

Committer:
kenken0721
Date:
Sat Jan 19 14:55:27 2019 +0000
Revision:
1:331042d0fbff
Parent:
0:b583163ca5b3

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenken0721 0:b583163ca5b3 1 /* mbed Servo Library without using PWM pins
kenken0721 0:b583163ca5b3 2 * Copyright (c) 2010 Jasper Denkers
kenken0721 0:b583163ca5b3 3 *
kenken0721 0:b583163ca5b3 4 * Changes and additions made by David Garrison, October 2015 to add ability to independently control each servo's speed
kenken0721 0:b583163ca5b3 5 *
kenken0721 0:b583163ca5b3 6 * Permission is hereby granted, free of charge, to any person obtaining a copy
kenken0721 0:b583163ca5b3 7 * of this software and associated documentation files (the "Software"), to deal
kenken0721 0:b583163ca5b3 8 * in the Software without restriction, including without limitation the rights
kenken0721 0:b583163ca5b3 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
kenken0721 0:b583163ca5b3 10 * copies of the Software, and to permit persons to whom the Software is
kenken0721 0:b583163ca5b3 11 * furnished to do so, subject to the following conditions:
kenken0721 0:b583163ca5b3 12 *
kenken0721 0:b583163ca5b3 13 * The above copyright notice and this permission notice shall be included in
kenken0721 0:b583163ca5b3 14 * all copies or substantial portions of the Software.
kenken0721 0:b583163ca5b3 15 *
kenken0721 0:b583163ca5b3 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
kenken0721 0:b583163ca5b3 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
kenken0721 0:b583163ca5b3 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
kenken0721 0:b583163ca5b3 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
kenken0721 0:b583163ca5b3 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenken0721 0:b583163ca5b3 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
kenken0721 0:b583163ca5b3 22 * THE SOFTWARE.
kenken0721 0:b583163ca5b3 23 */
kenken0721 0:b583163ca5b3 24
kenken0721 0:b583163ca5b3 25 #ifndef MBED_SERVO_H
kenken0721 0:b583163ca5b3 26 #define MBED_SERVO_H
kenken0721 0:b583163ca5b3 27
kenken0721 0:b583163ca5b3 28 #include "mbed.h"
kenken0721 0:b583163ca5b3 29
kenken0721 0:b583163ca5b3 30 /** Class to control servos on any pin, without using pwm
kenken0721 0:b583163ca5b3 31 * Tested on Nucleo -L152RE @40MHz MCU clock and the
kenken0721 0:b583163ca5b3 32 * st disco -f746ng RUNNING AT 216mhZ.
kenken0721 0:b583163ca5b3 33 *
kenken0721 0:b583163ca5b3 34 * Example:
kenken0721 0:b583163ca5b3 35 * @code
kenken0721 0:b583163ca5b3 36 *
kenken0721 0:b583163ca5b3 37 * // Keep sweeping two servos from left to right
kenken0721 0:b583163ca5b3 38 * #include "mbed.h"
kenken0721 0:b583163ca5b3 39 * #include "Servo.h"
kenken0721 0:b583163ca5b3 40 *
kenken0721 0:b583163ca5b3 41 *int main()
kenken0721 0:b583163ca5b3 42 *{
kenken0721 0:b583163ca5b3 43 *
kenken0721 0:b583163ca5b3 44 * Servo Servo1(D12); // create new instance of servo with output pin number
kenken0721 0:b583163ca5b3 45 * Servo Servo2(D10);
kenken0721 0:b583163ca5b3 46 * Servo1.Enable(1500,50,10); // Start position ; in us (1500 = center), servo refresh rate in Hz (analog servos = 50 Hz), servo movement speed range from 1-50, 1 slowest, about 20 seconds/180 degrees
kenken0721 0:b583163ca5b3 47 * Servo2.Enable(1500,50,10);
kenken0721 0:b583163ca5b3 48 * while(1) {
kenken0721 0:b583163ca5b3 49 *
kenken0721 0:b583163ca5b3 50 * Servo1.SetPosition(2300);
kenken0721 0:b583163ca5b3 51 * Servo2.SetPosition(2300);
kenken0721 0:b583163ca5b3 52 * wait(2.5);
kenken0721 0:b583163ca5b3 53 *
kenken0721 0:b583163ca5b3 54 *
kenken0721 0:b583163ca5b3 55 * Servo1.SetPosition(700);
kenken0721 0:b583163ca5b3 56 * Servo2.SetPosition(700);
kenken0721 0:b583163ca5b3 57 * wait(2.5);
kenken0721 0:b583163ca5b3 58 * }
kenken0721 0:b583163ca5b3 59 *
kenken0721 0:b583163ca5b3 60 *}
kenken0721 0:b583163ca5b3 61 * @endcode
kenken0721 0:b583163ca5b3 62 */
kenken0721 0:b583163ca5b3 63
kenken0721 0:b583163ca5b3 64 class Servo {
kenken0721 0:b583163ca5b3 65
kenken0721 0:b583163ca5b3 66 public:
kenken0721 0:b583163ca5b3 67 /** Create a new Servo object on any mbed pin
kenken0721 0:b583163ca5b3 68 *
kenken0721 0:b583163ca5b3 69 * @param Pin Pin on mbed to connect servo to
kenken0721 0:b583163ca5b3 70 */
kenken0721 0:b583163ca5b3 71 Servo(PinName Pin);
kenken0721 0:b583163ca5b3 72
kenken0721 0:b583163ca5b3 73 /** Change the position of the servo. Position in us
kenken0721 0:b583163ca5b3 74 *
kenken0721 0:b583163ca5b3 75 * @param NewPos The new value of the servos position (us)
kenken0721 0:b583163ca5b3 76 */
kenken0721 1:331042d0fbff 77 void SetPosition(int NewPos, int _speed);
kenken0721 0:b583163ca5b3 78
kenken0721 0:b583163ca5b3 79 /** speed oonversion from arbitary range of 1-50 to us to set Ticker Speed rate.
kenken0721 0:b583163ca5b3 80 * used in Enable function
kenken0721 0:b583163ca5b3 81 */
kenken0721 0:b583163ca5b3 82 int SpeedConvert (int _speed);
kenken0721 0:b583163ca5b3 83
kenken0721 0:b583163ca5b3 84 /** Enable the servo. Without enabling the servo won't be running. Startposition and period both in us.
kenken0721 0:b583163ca5b3 85 *
kenken0721 0:b583163ca5b3 86 * @param StartPos The position of the servo to start (us)
kenken0721 0:b583163ca5b3 87 * @param RefreshRate.set in Hz The time between every servo pulse. 20000 us = 50 Hz(standard) (us)
kenken0721 0:b583163ca5b3 88 Analog servos typically use a 50Hz refresh rate, while digital servos can use up to a 300Hz refresh rate.
kenken0721 0:b583163ca5b3 89 * @parm _speed The time between updating the pulse width of the servo pulses --controls speed of servo movement
kenken0721 0:b583163ca5b3 90 */
kenken0721 0:b583163ca5b3 91 void Enable(int StartPos, int RefreshRate, int _speed);
kenken0721 0:b583163ca5b3 92
kenken0721 0:b583163ca5b3 93 /** Disable the servo. After disabling the servo won't get any signal anymore
kenken0721 0:b583163ca5b3 94 *
kenken0721 0:b583163ca5b3 95 */
kenken0721 0:b583163ca5b3 96 void Disable();
kenken0721 0:b583163ca5b3 97
kenken0721 0:b583163ca5b3 98 /** determines direction of servo's move, called by Ticker Speed
kenken0721 0:b583163ca5b3 99 */
kenken0721 0:b583163ca5b3 100 void Update();
kenken0721 0:b583163ca5b3 101 //int Position;
kenken0721 0:b583163ca5b3 102 int speed;
kenken0721 0:b583163ca5b3 103 int CurrentPosition;
kenken0721 0:b583163ca5b3 104
kenken0721 0:b583163ca5b3 105
kenken0721 0:b583163ca5b3 106 private:
kenken0721 0:b583163ca5b3 107 void StartPulse();
kenken0721 0:b583163ca5b3 108 void EndPulse();
kenken0721 0:b583163ca5b3 109 int Position;
kenken0721 0:b583163ca5b3 110 int Period;
kenken0721 0:b583163ca5b3 111 int NewPosition;
kenken0721 0:b583163ca5b3 112 DigitalOut ServoPin;
kenken0721 0:b583163ca5b3 113 Ticker Pulse;
kenken0721 0:b583163ca5b3 114 Ticker Speed;
kenken0721 0:b583163ca5b3 115 Timeout PulseStop;
kenken0721 0:b583163ca5b3 116 };
kenken0721 0:b583163ca5b3 117
kenken0721 0:b583163ca5b3 118 #endif