mirror of
https://github.com/hybridgroup/gobot.git
synced 2025-04-29 13:49:14 +08:00
51 lines
1.5 KiB
Go
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()
|
|
}
|