gobot.io/x/gobot/v2@v2.1.0/drivers/gpio/servo_driver.go (about) 1 package gpio 2 3 import "gobot.io/x/gobot/v2" 4 5 // ServoDriver Represents a Servo 6 type ServoDriver struct { 7 name string 8 pin string 9 connection ServoWriter 10 gobot.Commander 11 CurrentAngle byte 12 } 13 14 // NewServoDriver returns a new ServoDriver given a ServoWriter and pin. 15 // 16 // Adds the following API Commands: 17 // 18 // "Move" - See ServoDriver.Move 19 // "Min" - See ServoDriver.Min 20 // "Center" - See ServoDriver.Center 21 // "Max" - See ServoDriver.Max 22 func NewServoDriver(a ServoWriter, pin string) *ServoDriver { 23 s := &ServoDriver{ 24 name: gobot.DefaultName("Servo"), 25 connection: a, 26 pin: pin, 27 Commander: gobot.NewCommander(), 28 CurrentAngle: 0, 29 } 30 31 s.AddCommand("Move", func(params map[string]interface{}) interface{} { 32 angle := byte(params["angle"].(float64)) 33 return s.Move(angle) 34 }) 35 s.AddCommand("Min", func(params map[string]interface{}) interface{} { 36 return s.Min() 37 }) 38 s.AddCommand("Center", func(params map[string]interface{}) interface{} { 39 return s.Center() 40 }) 41 s.AddCommand("Max", func(params map[string]interface{}) interface{} { 42 return s.Max() 43 }) 44 45 return s 46 47 } 48 49 // Name returns the ServoDrivers name 50 func (s *ServoDriver) Name() string { return s.name } 51 52 // SetName sets the ServoDrivers name 53 func (s *ServoDriver) SetName(n string) { s.name = n } 54 55 // Pin returns the ServoDrivers pin 56 func (s *ServoDriver) Pin() string { return s.pin } 57 58 // Connection returns the ServoDrivers connection 59 func (s *ServoDriver) Connection() gobot.Connection { return s.connection.(gobot.Connection) } 60 61 // Start implements the Driver interface 62 func (s *ServoDriver) Start() (err error) { return } 63 64 // Halt implements the Driver interface 65 func (s *ServoDriver) Halt() (err error) { return } 66 67 // Move sets the servo to the specified angle. Acceptable angles are 0-180 68 func (s *ServoDriver) Move(angle uint8) (err error) { 69 if angle > 180 { 70 return ErrServoOutOfRange 71 } 72 s.CurrentAngle = angle 73 return s.connection.ServoWrite(s.Pin(), angle) 74 } 75 76 // Min sets the servo to it's minimum position 77 func (s *ServoDriver) Min() (err error) { 78 return s.Move(0) 79 } 80 81 // Center sets the servo to it's center position 82 func (s *ServoDriver) Center() (err error) { 83 return s.Move(90) 84 } 85 86 // Max sets the servo to its maximum position 87 func (s *ServoDriver) Max() (err error) { 88 return s.Move(180) 89 }