Source code for grove.grove_multi_switch
#!/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 - 5-Way Switch <https://www.seeedstudio.com/Grove-5-Way-Switch-p-3136.html>`_
- `Grove - 6-Position DIP Switch <https://www.seeedstudio.com/Grove-6-Position-DIP-Switch-p-3137.html>`_
Examples:
.. code-block:: python
from grove.button import Button
import grove.grove_multi_switch.GroveMultiSwitch
import time
switch = GroveMultiSwitch()
# the default behavior is
# printing all happening event with names
# remove \'\'\' pairs below to begin your experiment
\'\'\'
# define a customized event handle your self
def cust_on_event(index, event, tm):
# switch.btn(ButtonTypedI2c object) could be used to check every event.
print("event with code {}, time {}".format(event, tm))
switch.on_event = cust_on_event
\'\'\'
while True:
time.sleep(1)
'''
from __future__ import print_function
from grove.button import Button
from grove.factory import Factory
import time
__all__ = ['GroveMultiSwitch']
[docs]
class GroveMultiSwitch(object):
'''
Grove 5-Way-Switch/6-Po-DIP-Switch class
all of them has a button array with I2C interface.
'''
def __init__(self):
self.btn = Factory.getButton("I2C", 0)
self.__on_event = None
self.btn.on_event(self, GroveMultiSwitch.__handle_event)
@property
def on_event(self):
'''
Argument
callback -- a callable function/object,
will be called when there is button event
callback prototype:
callback(index, code, time)
callback argument:
Args:
index(int): button index, be in 0 to [button count - 1]
code (int): bits combination of
- Button.EV_LEVEL_CHANGED
- Button.EV_SINGLE_CLICK
- Button.EV_DOUBLE_CLICK
- Button.EV_LONG_PRESS
time(time): event generation time
Returns: none
Examples:
set
.. code-block:: python
obj.on_event = callback
get
.. code-block:: python
callobj = obj.on_event
'''
return self.__on_event
@on_event.setter
def on_event(self, callback):
if not callable(callback):
return
self.__on_event = callback
def __handle_event(self, evt):
# print("event index:{} event:{} pressed:{}"
# .format(evt['index'], evt['code'], evt['pressed']))
if callable(self.__on_event):
self.__on_event(evt['index'], evt['code'], evt['time'])
return
name = self.btn.name(evt['index'])
event = evt['code']
print("{} : ".format(name), end='')
print("HIGH " if evt['pressed'] else "LOW ", end='')
print("SINGLE-CLICK " if event & Button.EV_SINGLE_CLICK else "", end='')
print("DOUBLE-CLICK " if event & Button.EV_DOUBLE_CLICK else "", end='')
print("LONG - PRESS " if event & Button.EV_LONG_PRESS else "", end='')
print("LEVEL-CHANGE " if event & Button.EV_LEVEL_CHANGED else "", end='')
print("")
def main():
import time
print(\
""" Make sure Grove-5-Way-Switch or Grove-6-Position-DIP-Switch
inserted in one I2C slot of Grove-Base-Hat
""")
switch = GroveMultiSwitch()
# remove ''' pairs below to begin your experiment
'''
# define a customized event handle your self
def cust_on_event(index, event, tm):
# switch.btn could be used to check every event.
print("event with code {}, time {}".format(event, tm))
switch.on_event = cust_on_event
'''
while True:
time.sleep(1)
if __name__ == '__main__':
main()