@@ -7,6 +7,7 @@ package tlv493d
77import (
88 "errors"
99 "fmt"
10+ "log"
1011 "sync"
1112 "time"
1213
@@ -185,7 +186,7 @@ func New(i i2c.Bus, opts *Opts) (*Dev, error) {
185186 temperatureOffsetCompensation : opts .TemperatureOffsetCompensation ,
186187 registersBuffer : make ([]byte , numberOfReadRegisters ),
187188 }
188- if err := d .initialize (opts ); err != nil {
189+ if err := d .initialize (opts . Reset ); err != nil {
189190 return nil , err
190191 }
191192 return d , nil
@@ -204,7 +205,7 @@ func (d *Dev) Halt() error {
204205 return d .SetMode (PowerDownMode )
205206}
206207
207- func (d * Dev ) initialize (opts * Opts ) error {
208+ func (d * Dev ) initialize (reset bool ) error {
208209 d .mu .Lock ()
209210 defer d .mu .Unlock ()
210211
@@ -215,7 +216,7 @@ func (d *Dev) initialize(opts *Opts) error {
215216 return err
216217 }
217218
218- if opts . Reset {
219+ if reset {
219220 // Reset I2C address
220221 var resetAddress byte = 0x00
221222 if d .i2c .Addr == I2CAddr1 {
@@ -403,7 +404,14 @@ func (d *Dev) ReadContinuous(frequency physic.Frequency, precision Precision) (<
403404 case <- t .C :
404405 value , err := d .Read (precision )
405406 if err != nil {
406- // In continuous mode, we'll ignore errors silently.
407+ // Try resetting the sensor to recover from errors
408+ if err := d .initialize (true ); err == nil {
409+ if err := d .SetMode (newMode ); err != nil {
410+ log .Println ("Unable to reset TLV493D mode:" , err )
411+ } else {
412+ log .Println ("Sensor reset successfully" )
413+ }
414+ }
407415 continue
408416 }
409417 reading <- value
0 commit comments