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 }