gobot.io/x/gobot/v2@v2.1.0/drivers/gpio/led_driver.go (about)

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