package main import ( "gobot.io/x/gobot" "gobot.io/x/gobot/drivers/i2c" "sync" ) type ADS7830 struct { //*gobot.Driver name string connector i2c.Connector connection i2c.Connection i2c.Config mutex sync.Mutex } func NewADS7830(c i2c.Connector, options ...func(config i2c.Config)) *ADS7830 { adc := &ADS7830{ name: gobot.DefaultName("ADS7830"), mutex: sync.Mutex{}, connector: c, Config: i2c.NewConfig(), } for _, option := range options { option(adc) } return adc } func (adc *ADS7830) AnalogRead(channel int) (int, error) { adc.mutex.Lock() defer adc.mutex.Unlock() register := 0x84 | (((channel<<2 | channel>>1) & 0x07) << 4) value, err := adc.connection.ReadByteData(uint8(register)) if err != nil { return 0, err } return int(value), nil } func (adc *ADS7830) Name() string { return adc.name } func (adc *ADS7830) SetName(name string) { adc.name = name } func (adc *ADS7830) Start() (err error) { bus := adc.GetBusOrDefault(adc.connector.GetDefaultBus()) address := adc.GetAddressOrDefault(0x48) adc.connection, err = adc.connector.GetConnection(address, bus) if err != nil { return err } return nil } func (adc *ADS7830) Halt() error { return nil } func (adc *ADS7830) Connection() gobot.Connection { return adc.connector.(gobot.Connection) }