gobot.io/x/gobot@v1.16.0/drivers/gpio/servo_driver.go (about)

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