1
0
mirror of https://github.com/kidoman/embd synced 2024-12-22 12:50:19 +01:00

Water sensor Packaged

This commit is contained in:
Kashyap Kopparam 2013-12-23 16:48:00 +05:30
parent 534e903925
commit e9d5fc03ef
2 changed files with 25 additions and 18 deletions

BIN
sensor/us020/.us020.go.swp Normal file

Binary file not shown.

View File

@ -1,3 +1,4 @@
// Package watersensor allows interfacing with the water sensor
package watersensor package watersensor
import ( import (
@ -8,43 +9,48 @@ import (
type watersensor struct { type watersensor struct {
waterPinNumber int waterPinNumber int
waterPin rpio.Pin waterPin rpio.Pin
initialized bool
mu *sync.RWMutex initialized bool
debug bool mu *sync.RWMutex
debug bool
} }
// WaterSensor implements access to a water sensor
type WaterSensor interface { type WaterSensor interface {
// IsWet determines if there is water present on the sensor
IsWet() (b bool,err error) IsWet() (b bool,err error)
} }
// New creates a new WaterSensor interface
func New(pinNumber int) WaterSensor { func New(pinNumber int) WaterSensor {
return &watersensor{waterPinNumber: pinNumber, mu: new(sync.RWMutex)} return &watersensor{waterPinNumber: pinNumber, mu: new(sync.RWMutex)}
} }
func (d *watersensor) Setup() (err error) { func (d *watersensor) Setup() (err error) {
d.mu.RLock() d.mu.RLock()
if d.initialized { if d.initialized {
d.mu.RUnlock() d.mu.RUnlock()
return return
} }
d.mu.RUnlock() d.mu.RUnlock()
d.mu.Lock() d.mu.Lock()
defer d.mu.Unlock() defer d.mu.Unlock()
if err = rpio.Open(); err != nil {
return
}
if err = rpio.Open(); err != nil {
return
}
d.waterPin = rpio.Pin(d.waterPinNumber) d.waterPin = rpio.Pin(d.waterPinNumber)
d.waterPin.Input()
d.initialized = true
d.waterPin.Input() return nil
d.initialized = true
return nil
} }
// IsWet determines if there is water present on the sensor
func (d *watersensor) IsWet() (b bool, err error) { func (d *watersensor) IsWet() (b bool, err error) {
if err = d.Setup(); err != nil { if err = d.Setup(); err != nil {
return return
@ -54,6 +60,7 @@ func (d *watersensor) IsWet() (b bool, err error) {
log.Print("Getting reading") log.Print("Getting reading")
} }
// Read the pin value of the sensor
if d.waterPin.Read() == rpio.High { if d.waterPin.Read() == rpio.High {
b=true b=true
} else { } else {