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