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  }