gobot.io/x/gobot@v1.16.0/drivers/gpio/rgb_led_driver.go (about) 1 package gpio 2 3 import "gobot.io/x/gobot" 4 5 // RgbLedDriver represents a digital RGB Led 6 type RgbLedDriver struct { 7 pinRed string 8 redColor byte 9 pinGreen string 10 greenColor byte 11 pinBlue string 12 blueColor byte 13 name string 14 connection DigitalWriter 15 high bool 16 gobot.Commander 17 } 18 19 // NewRgbLedDriver return a new RgbLedDriver given a DigitalWriter and 20 // 3 pins: redPin, greenPin, and bluePin 21 // 22 // Adds the following API Commands: 23 // "SetRGB" - See RgbLedDriver.SetRGB 24 // "Toggle" - See RgbLedDriver.Toggle 25 // "On" - See RgbLedDriver.On 26 // "Off" - See RgbLedDriver.Off 27 func NewRgbLedDriver(a DigitalWriter, redPin string, greenPin string, bluePin string) *RgbLedDriver { 28 l := &RgbLedDriver{ 29 name: gobot.DefaultName("RGBLED"), 30 pinRed: redPin, 31 pinGreen: greenPin, 32 pinBlue: bluePin, 33 connection: a, 34 high: false, 35 Commander: gobot.NewCommander(), 36 } 37 38 l.AddCommand("SetRGB", func(params map[string]interface{}) interface{} { 39 r := byte(params["r"].(int)) 40 g := byte(params["g"].(int)) 41 b := byte(params["b"].(int)) 42 return l.SetRGB(r, g, b) 43 }) 44 45 l.AddCommand("Toggle", func(params map[string]interface{}) interface{} { 46 return l.Toggle() 47 }) 48 49 l.AddCommand("On", func(params map[string]interface{}) interface{} { 50 return l.On() 51 }) 52 53 l.AddCommand("Off", func(params map[string]interface{}) interface{} { 54 return l.Off() 55 }) 56 57 return l 58 } 59 60 // Start implements the Driver interface 61 func (l *RgbLedDriver) Start() (err error) { return } 62 63 // Halt implements the Driver interface 64 func (l *RgbLedDriver) Halt() (err error) { return } 65 66 // Name returns the RGBLEDDrivers name 67 func (l *RgbLedDriver) Name() string { return l.name } 68 69 // SetName sets the RGBLEDDrivers name 70 func (l *RgbLedDriver) SetName(n string) { l.name = n } 71 72 // Pin returns the RgbLedDrivers pins 73 func (l *RgbLedDriver) Pin() string { return "r=" + l.pinRed + ", g=" + l.pinGreen + ", b=" + l.pinBlue } 74 75 // RedPin returns the RgbLedDrivers redPin 76 func (l *RgbLedDriver) RedPin() string { return l.pinRed } 77 78 // GreenPin returns the RgbLedDrivers redPin 79 func (l *RgbLedDriver) GreenPin() string { return l.pinGreen } 80 81 // BluePin returns the RgbLedDrivers bluePin 82 func (l *RgbLedDriver) BluePin() string { return l.pinBlue } 83 84 // Connection returns the RgbLedDriver Connection 85 func (l *RgbLedDriver) Connection() gobot.Connection { 86 return l.connection.(gobot.Connection) 87 } 88 89 // State return true if the led is On and false if the led is Off 90 func (l *RgbLedDriver) State() bool { 91 return l.high 92 } 93 94 // On sets the led's pins to their various states 95 func (l *RgbLedDriver) On() (err error) { 96 if err = l.SetLevel(l.pinRed, l.redColor); err != nil { 97 return 98 } 99 100 if err = l.SetLevel(l.pinGreen, l.greenColor); err != nil { 101 return 102 } 103 104 if err = l.SetLevel(l.pinBlue, l.blueColor); err != nil { 105 return 106 } 107 108 l.high = true 109 return 110 } 111 112 // Off sets the led to black. 113 func (l *RgbLedDriver) Off() (err error) { 114 if err = l.SetLevel(l.pinRed, 0); err != nil { 115 return 116 } 117 118 if err = l.SetLevel(l.pinGreen, 0); err != nil { 119 return 120 } 121 122 if err = l.SetLevel(l.pinBlue, 0); err != nil { 123 return 124 } 125 126 l.high = false 127 return 128 } 129 130 // Toggle sets the led to the opposite of it's current state 131 func (l *RgbLedDriver) Toggle() (err error) { 132 if l.State() { 133 err = l.Off() 134 } else { 135 err = l.On() 136 } 137 return 138 } 139 140 // SetLevel sets the led to the specified color level 141 func (l *RgbLedDriver) SetLevel(pin string, level byte) (err error) { 142 if writer, ok := l.connection.(PwmWriter); ok { 143 return writer.PwmWrite(pin, level) 144 } 145 return ErrPwmWriteUnsupported 146 } 147 148 // SetRGB sets the Red Green Blue value of the LED. 149 func (l *RgbLedDriver) SetRGB(r, g, b byte) error { 150 l.redColor = r 151 l.greenColor = g 152 l.blueColor = b 153 154 return l.On() 155 }