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

     1  package gpio
     2  
     3  import "gobot.io/x/gobot"
     4  
     5  // LedDriver represents a digital Led
     6  type LedDriver struct {
     7  	pin        string
     8  	name       string
     9  	connection DigitalWriter
    10  	high       bool
    11  	gobot.Commander
    12  }
    13  
    14  // NewLedDriver return a new LedDriver given a DigitalWriter and pin.
    15  //
    16  // Adds the following API Commands:
    17  //	"Brightness" - See LedDriver.Brightness
    18  //	"Toggle" - See LedDriver.Toggle
    19  //	"On" - See LedDriver.On
    20  //	"Off" - See LedDriver.Off
    21  func NewLedDriver(a DigitalWriter, pin string) *LedDriver {
    22  	l := &LedDriver{
    23  		name:       gobot.DefaultName("LED"),
    24  		pin:        pin,
    25  		connection: a,
    26  		high:       false,
    27  		Commander:  gobot.NewCommander(),
    28  	}
    29  
    30  	l.AddCommand("Brightness", func(params map[string]interface{}) interface{} {
    31  		level := byte(params["level"].(float64))
    32  		return l.Brightness(level)
    33  	})
    34  
    35  	l.AddCommand("Toggle", func(params map[string]interface{}) interface{} {
    36  		return l.Toggle()
    37  	})
    38  
    39  	l.AddCommand("On", func(params map[string]interface{}) interface{} {
    40  		return l.On()
    41  	})
    42  
    43  	l.AddCommand("Off", func(params map[string]interface{}) interface{} {
    44  		return l.Off()
    45  	})
    46  
    47  	return l
    48  }
    49  
    50  // Start implements the Driver interface
    51  func (l *LedDriver) Start() (err error) { return }
    52  
    53  // Halt implements the Driver interface
    54  func (l *LedDriver) Halt() (err error) { return }
    55  
    56  // Name returns the LedDrivers name
    57  func (l *LedDriver) Name() string { return l.name }
    58  
    59  // SetName sets the LedDrivers name
    60  func (l *LedDriver) SetName(n string) { l.name = n }
    61  
    62  // Pin returns the LedDrivers name
    63  func (l *LedDriver) Pin() string { return l.pin }
    64  
    65  // Connection returns the LedDrivers Connection
    66  func (l *LedDriver) Connection() gobot.Connection {
    67  	return l.connection.(gobot.Connection)
    68  }
    69  
    70  // State return true if the led is On and false if the led is Off
    71  func (l *LedDriver) State() bool {
    72  	return l.high
    73  }
    74  
    75  // On sets the led to a high state.
    76  func (l *LedDriver) On() (err error) {
    77  	if err = l.connection.DigitalWrite(l.Pin(), 1); err != nil {
    78  		return
    79  	}
    80  	l.high = true
    81  	return
    82  }
    83  
    84  // Off sets the led to a low state.
    85  func (l *LedDriver) Off() (err error) {
    86  	if err = l.connection.DigitalWrite(l.Pin(), 0); err != nil {
    87  		return
    88  	}
    89  	l.high = false
    90  	return
    91  }
    92  
    93  // Toggle sets the led to the opposite of it's current state
    94  func (l *LedDriver) Toggle() (err error) {
    95  	if l.State() {
    96  		err = l.Off()
    97  	} else {
    98  		err = l.On()
    99  	}
   100  	return
   101  }
   102  
   103  // Brightness sets the led to the specified level of brightness
   104  func (l *LedDriver) Brightness(level byte) (err error) {
   105  	if writer, ok := l.connection.(PwmWriter); ok {
   106  		return writer.PwmWrite(l.Pin(), level)
   107  	}
   108  	return ErrPwmWriteUnsupported
   109  }