From 31f3386652c8cdc9f18c2e539dec6ac4f1ee40ae Mon Sep 17 00:00:00 2001 From: Adam Bright Date: Thu, 29 Sep 2016 06:07:22 +0000 Subject: [PATCH] make SetCriticalTempLock and SetWindowTempLock exported and don't auto lock when setting temps since the device doesn't seem to respond well to it --- samples/mcp9808.go | 18 +++++++++++------ sensor/mcp9808/mcp9808.go | 42 +++++++++------------------------------ 2 files changed, 21 insertions(+), 39 deletions(-) diff --git a/samples/mcp9808.go b/samples/mcp9808.go index 104c52d..03a7cc9 100644 --- a/samples/mcp9808.go +++ b/samples/mcp9808.go @@ -4,7 +4,6 @@ import ( "bufio" "fmt" "os" - "time" "github.com/kidoman/embd" _ "github.com/kidoman/embd/host/rpi" @@ -28,6 +27,8 @@ func main() { } therm.SetShutdownMode(false) + therm.SetCriticalTempLock(false) + therm.SetWindowTempLock(false) therm.SetAlertMode(true) therm.SetInterruptClear(true) therm.SetAlertStatus(true) @@ -35,6 +36,9 @@ func main() { therm.SetAlertSelect(false) therm.SetAlertPolarity(true) + // get faster results (130ms vs 250ms default) + therm.SetTempResolution(mcp9808.EighthC) + config, _ := therm.Config() fmt.Printf("New Config: %b\n", config) @@ -47,7 +51,7 @@ func main() { } fmt.Printf("Critical Temp set to: %fC\n", critTemp) - if err := therm.SetWindowTempLower(TempFToC(50)); err != nil { + if err := therm.SetWindowTempLower(TempFToC(60)); err != nil { panic(err) } lowerTemp, err := therm.WindowTempLower() @@ -62,6 +66,9 @@ func main() { upperTemp, _ := therm.WindowTempUpper() fmt.Printf("Upper Temp Limit set to: %fC\n", upperTemp) + therm.SetCriticalTempLock(true) + therm.SetWindowTempLock(true) + alert, err := embd.NewDigitalPin(23) if err != nil { panic(err) @@ -87,10 +94,11 @@ func main() { cancel <- true }() - timer := time.Tick(time.Duration(5) * time.Second) for { select { - case <-timer: + case <-cancel: + return + default: temp, err := therm.AmbientTemp() if err != nil { fmt.Printf("Error reading temp: %s\n", err.Error()) @@ -98,8 +106,6 @@ func main() { fmt.Printf("Current temp is: %fF (%fC), Window Alert: %v, Critical Alert: %v\n", TempCToF(temp.CelsiusDeg), temp.CelsiusDeg, temp.AboveUpper || temp.BelowLower, temp.AboveCritical) } - case <-cancel: - return } } } diff --git a/sensor/mcp9808/mcp9808.go b/sensor/mcp9808/mcp9808.go index 24bc85e..8b406ff 100644 --- a/sensor/mcp9808/mcp9808.go +++ b/sensor/mcp9808/mcp9808.go @@ -164,7 +164,7 @@ func (d *MCP9808) CriticalTempLock() (bool, error) { // 1 (true) = Locked. TCRIT register can not be written // When enabled, this bit remains set to ‘1’ or locked until cleared by an internal Reset // This bit can be programmed in Shutdown mode. -func (d *MCP9808) setCriticalTempLock(locked bool) error { +func (d *MCP9808) SetCriticalTempLock(locked bool) error { return d.flipConfigBit(configCriticalTempLock, locked) } @@ -176,12 +176,12 @@ func (d *MCP9808) WindowTempLock() (bool, error) { return d.readConfigValue(configWindowTempLock) } -// setWindowTempLock - TUPPER and TLOWER Window Lock bit +// SetWindowTempLock - TUPPER and TLOWER Window Lock bit // 0 (false) = Unlocked; TUPPER and TLOWER registers can be written (power-up default) // 1 (true) = Locked; TUPPER and TLOWER registers can not be written // When enabled, this bit remains set to ‘1’ or locked until cleared by a Power-on Reset // This bit can be programmed in Shutdown mode. -func (d *MCP9808) setWindowTempLock(locked bool) error { +func (d *MCP9808) SetWindowTempLock(locked bool) error { return d.flipConfigBit(configWindowTempLock, locked) } @@ -329,17 +329,9 @@ func (d *MCP9808) CriticalTemp() (float64, error) { } // SetCriticalTemp when the temperature goes above the set value the alert will be -// triggered if enabled. +// triggered if enabled. This has no effect if CriticalTempLock is set. func (d *MCP9808) SetCriticalTemp(newTemp float64) error { - if err := d.setCriticalTempLock(false); err != nil { - return err - } - - if err := d.setTemp(regCriticalTemp, newTemp); err != nil { - return err - } - - return d.setCriticalTempLock(true) + return d.setTemp(regCriticalTemp, newTemp) } // WindowTempUpper reads the current temperature set in the upper window temperature register. @@ -348,17 +340,9 @@ func (d *MCP9808) WindowTempUpper() (float64, error) { } // SetWindowTempUpper when the temperature goes above the set value the alert will be -// triggered if enabled. +// triggered if enabled. This has no effect if WindowTempLock is set. func (d *MCP9808) SetWindowTempUpper(newTemp float64) error { - if err := d.setWindowTempLock(false); err != nil { - return err - } - - if err := d.setTemp(regUpperTemp, newTemp); err != nil { - return err - } - - return d.setWindowTempLock(true) + return d.setTemp(regUpperTemp, newTemp) } // WindowTempLower reads the current temperature set in the lower window temperature register. @@ -367,17 +351,9 @@ func (d *MCP9808) WindowTempLower() (float64, error) { } // SetWindowTempLower when the temperature goes below the set value the alert will be -// triggered if enabled. +// triggered if enabled. This has no effect if WindowTempLock is set. func (d *MCP9808) SetWindowTempLower(newTemp float64) error { - if err := d.setWindowTempLock(false); err != nil { - return err - } - - if err := d.setTemp(regLowerTemp, newTemp); err != nil { - return err - } - - return d.setWindowTempLock(true) + return d.setTemp(regLowerTemp, newTemp) } // TempResolution reads the current temperature accuracy from the sensor (affects temperature read speed)