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  }