72 lines
1.3 KiB
Go

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)
}