From 35cbc690a56803c02fb8f92e87a6678bc1f92f32 Mon Sep 17 00:00:00 2001 From: Kashyap Kopparam Date: Mon, 23 Dec 2013 16:39:02 +0530 Subject: [PATCH] added water sensor library --- sensor/watersensor/watersensor.go | 64 +++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 sensor/watersensor/watersensor.go diff --git a/sensor/watersensor/watersensor.go b/sensor/watersensor/watersensor.go new file mode 100644 index 0000000..ec94b4b --- /dev/null +++ b/sensor/watersensor/watersensor.go @@ -0,0 +1,64 @@ +package watersensor + +import ( + "log" + "sync" + "github.com/stianeikeland/go-rpio" + ) + +type watersensor struct { + waterPinNumber int + waterPin rpio.Pin + initialized bool + mu *sync.RWMutex + debug bool +} + +type WaterSensor interface { + IsWet() (b bool,err error) +} + +func New(pinNumber int) WaterSensor { + return &watersensor{waterPinNumber: pinNumber, mu: new(sync.RWMutex)} +} + +func (d *watersensor) Setup() (err error) { + d.mu.RLock() + if d.initialized { + d.mu.RUnlock() + return + } + d.mu.RUnlock() + + d.mu.Lock() + defer d.mu.Unlock() + + if err = rpio.Open(); err != nil { + return + } + d.waterPin = rpio.Pin(d.waterPinNumber) + + d.waterPin.Input() + + d.initialized = true + + return nil +} + +func (d *watersensor) IsWet() (b bool, err error) { + if err = d.Setup(); err != nil { + return + } + + if d.debug { + log.Print("Getting reading") + } + + if d.waterPin.Read() == rpio.High { + b=true + } else { + b=false + } + + return +}