make SetCriticalTempLock and SetWindowTempLock exported and don't auto lock when setting temps since the device doesn't seem to respond well to it

This commit is contained in:
Adam Bright 2016-09-29 06:07:22 +00:00
parent 24db7580a4
commit 31f3386652
2 changed files with 21 additions and 39 deletions

View File

@ -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
}
}
}

View File

@ -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)