gobot.io/x/gobot/v2@v2.1.0/drivers/i2c/blinkm_driver.go (about) 1 package i2c 2 3 import ( 4 "fmt" 5 ) 6 7 const blinkmDefaultAddress = 0x09 8 9 // BlinkMDriver is a Gobot Driver for a BlinkM LED 10 type BlinkMDriver struct { 11 *Driver 12 } 13 14 // NewBlinkMDriver creates a new BlinkMDriver. 15 // 16 // Params: 17 // c Connector - the Adaptor to use with this Driver 18 // 19 // Optional params: 20 // i2c.WithBus(int): bus to use with this driver 21 // i2c.WithAddress(int): address to use with this driver 22 // 23 func NewBlinkMDriver(c Connector, options ...func(Config)) *BlinkMDriver { 24 b := &BlinkMDriver{ 25 Driver: NewDriver(c, "BlinkM", blinkmDefaultAddress), 26 } 27 b.afterStart = b.initialize 28 29 for _, option := range options { 30 option(b) 31 } 32 33 b.AddCommand("Rgb", func(params map[string]interface{}) interface{} { 34 red := byte(params["red"].(float64)) 35 green := byte(params["green"].(float64)) 36 blue := byte(params["blue"].(float64)) 37 return b.Rgb(red, green, blue) 38 }) 39 40 b.AddCommand("Fade", func(params map[string]interface{}) interface{} { 41 red := byte(params["red"].(float64)) 42 green := byte(params["green"].(float64)) 43 blue := byte(params["blue"].(float64)) 44 return b.Fade(red, green, blue) 45 }) 46 47 b.AddCommand("FirmwareVersion", func(params map[string]interface{}) interface{} { 48 version, err := b.FirmwareVersion() 49 return map[string]interface{}{"version": version, "err": err} 50 }) 51 52 b.AddCommand("Color", func(params map[string]interface{}) interface{} { 53 color, err := b.Color() 54 return map[string]interface{}{"color": color, "err": err} 55 }) 56 57 return b 58 } 59 60 // Rgb sets color using r,g,b params 61 func (b *BlinkMDriver) Rgb(red byte, green byte, blue byte) (err error) { 62 if _, err = b.connection.Write([]byte("n")); err != nil { 63 return 64 } 65 _, err = b.connection.Write([]byte{red, green, blue}) 66 return 67 } 68 69 // Fade removes color using r,g,b params 70 func (b *BlinkMDriver) Fade(red byte, green byte, blue byte) (err error) { 71 if _, err = b.connection.Write([]byte("c")); err != nil { 72 return 73 } 74 _, err = b.connection.Write([]byte{red, green, blue}) 75 return 76 } 77 78 // FirmwareVersion returns version with MAYOR.minor format 79 func (b *BlinkMDriver) FirmwareVersion() (version string, err error) { 80 if _, err = b.connection.Write([]byte("Z")); err != nil { 81 return 82 } 83 data := []byte{0, 0} 84 read, err := b.connection.Read(data) 85 if read != 2 || err != nil { 86 return 87 } 88 return fmt.Sprintf("%v.%v", data[0], data[1]), nil 89 } 90 91 // Color returns an array with current rgb color 92 func (b *BlinkMDriver) Color() (color []byte, err error) { 93 if _, err = b.connection.Write([]byte("g")); err != nil { 94 return 95 } 96 data := []byte{0, 0, 0} 97 read, err := b.connection.Read(data) 98 if read != 3 || err != nil { 99 return []byte{}, err 100 } 101 return []byte{data[0], data[1], data[2]}, nil 102 } 103 104 func (b *BlinkMDriver) initialize() error { 105 if _, err := b.connection.Write([]byte("o")); err != nil { 106 return err 107 } 108 return nil 109 }