72 lines
1.3 KiB
Go
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)
|
|
}
|