Source code for grove.grove_button
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# The MIT License (MIT)
#
# Grove Base Hat for the Raspberry Pi, used to connect grove sensors.
# Copyright (C) 2018 Seeed Technology Co.,Ltd.
#
'''
This is the code for
- `Grove - Button <https://www.seeedstudio.com/s/Grove-Button-p-766.html>`_
Examples:
.. code-block:: python
from grove.grove_button import GroveButton
import time
# connect to pin 5 (slot D5)
PIN = 5
button = GroveButton(PIN)
def on_press(t):
print('Button is pressed')
def on_release(t):
print("Button is released, pressed for {0} seconds".format(round(t,6)))
button.on_press = on_press
button.on_release = on_release
while True:
time.sleep(1)
'''
import time
from grove.button import Button
from grove.factory import Factory
__all__ = ['GroveButton']
[docs]
class GroveButton(object):
'''
Grove Button class
Args:
pin(int): the number of gpio/slot your grove device connected.
'''
def __init__(self, pin):
# High = pressed
self.__btn = Factory.getButton("GPIO-HIGH", pin)
self.__last_time = time.time()
self.__on_press = None
self.__on_release = None
self.__btn.on_event(self, GroveButton.__handle_event)
@property
def on_press(self):
'''
Property access with
callback -- a callable function/object,
will be called when there is a button pressing.
callback prototype:
callback()
Returns: none
Examples:
set
.. code-block:: python
obj.on_press = callback
get
.. code-block:: python
callobj = obj.on_press
'''
return self.__on_press
@on_press.setter
def on_press(self, callback):
if not callable(callback):
return
self.__on_press = callback
@property
def on_release(self):
'''
Property access with
callback -- a callable function/object,
will be called when there is a button releasing.
callback prototype:
callback()
Returns: none
Examples:
set
.. code-block:: python
obj.on_release = callback
get
.. code-block:: python
callobj = obj.on_release
'''
return self.__on_release
@on_release.setter
def on_release(self, callback):
if not callable(callback):
return
self.__on_release = callback
def __handle_event(self, evt):
dt, self.__last_time = evt["time"] - self.__last_time, evt["time"]
# print("event index:{} event:{} pressed:{}"
# .format(evt["index"], evt["code"], evt["pressed"]))
if evt["code"] == Button.EV_LEVEL_CHANGED:
if evt["pressed"]:
if callable(self.__on_press):
self.__on_press(dt)
else:
if callable(self.__on_release):
self.__on_release(dt)
Grove = GroveButton
def main():
from grove.helper import SlotHelper
sh = SlotHelper(SlotHelper.GPIO)
pin = sh.argv2pin()
button = GroveButton(pin)
def on_press(t):
print('Button is pressed')
def on_release(t):
print("Button is released, pressed for {0} seconds".format(round(t,6)))
button.on_press = on_press
button.on_release = on_release
while True:
time.sleep(1)
if __name__ == '__main__':
main()