1
0
mirror of https://github.com/hybridgroup/gobot.git synced 2025-04-29 13:49:14 +08:00
hybridgroup.gobot/drivers/aio/grove_temperature_sensor_driver.go
2023-11-23 19:01:42 +01:00

51 lines
1.5 KiB
Go

package aio
import (
"fmt"
"time"
"gobot.io/x/gobot/v2"
)
// GroveTemperatureSensorDriver represents a temperature sensor
// The temperature is reported in degree Celsius
type GroveTemperatureSensorDriver struct {
*TemperatureSensorDriver
}
// NewGroveTemperatureSensorDriver returns a new driver for grove temperature sensor, given an AnalogReader and pin.
//
// Supported options: see [aio.NewAnalogSensorDriver]
// Adds the following API Commands: see [aio.NewAnalogSensorDriver]
func NewGroveTemperatureSensorDriver(a AnalogReader, pin string, opts ...interface{}) *GroveTemperatureSensorDriver {
t := NewTemperatureSensorDriver(a, pin, opts...)
ntc := TemperatureSensorNtcConf{TC0: 25, R0: 10000.0, B: 3975} // Ohm, R25=10k
t.SetNtcScaler(1023, 10000, false, ntc) // Ohm, reference value: 1023, series R: 10k
d := &GroveTemperatureSensorDriver{
TemperatureSensorDriver: t,
}
d.driverCfg.name = gobot.DefaultName("GroveTemperatureSensor")
for _, opt := range opts {
switch o := opt.(type) {
case optionApplier:
o.apply(d.driverCfg)
case sensorOptionApplier:
o.apply(d.sensorCfg)
case time.Duration:
// TODO this is only for backward compatibility and will be removed after version 2.x
d.sensorCfg.readInterval = o
default:
panic(fmt.Sprintf("'%s' can not be applied on '%s'", opt, d.driverCfg.name))
}
}
return d
}
// Temperature returns the last read temperature from the sensor.
func (t *TemperatureSensorDriver) Temperature() float64 {
return t.Value()
}