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 }