本文整理汇总了Python中machine.Pin.callback方法的典型用法代码示例。如果您正苦于以下问题:Python Pin.callback方法的具体用法?Python Pin.callback怎么用?Python Pin.callback使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类machine.Pin
的用法示例。
在下文中一共展示了Pin.callback方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
# 需要导入模块: from machine import Pin [as 别名]
# 或者: from machine.Pin import callback [as 别名]
class Button:
def __init__(self, id):
self.pressed = False
self.btn = Pin(id, mode=Pin.IN, pull=Pin.PULL_UP)
def on(self):
self.btn.callback(Pin.IRQ_FALLING | Pin.IRQ_RISING,
self._handler)
def off(self):
self.btn.callback(Pin.IRQ_FALLING | Pin.IRQ_RISING,
None)
def _handler(self, pin):
value = pin.value()
if not value and not self.pressed:
print('Button pushed')
self.pressed = True
elif value and self.pressed:
print('Button released')
self.pressed = False
else:
pass
示例2: handler
# 需要导入模块: from machine import Pin [as 别名]
# 或者: from machine.Pin import callback [as 别名]
from machine import Pin
import time
# Pin: P14 for Pysense board
# Pin: G17 for Extension board
is_pressed = False
def handler(pin):
global is_pressed
value = pin.value()
if not value and not is_pressed:
print('Button pressed')
is_pressed = True
elif value and is_pressed:
print('Button released')
is_pressed = False
else:
pass
btn = Pin("G17", mode=Pin.IN, pull=Pin.PULL_UP)
btn.callback(Pin.IRQ_FALLING | Pin.IRQ_RISING, handler)
示例3: toggle_wlan_mode
# 需要导入模块: from machine import Pin [as 别名]
# 或者: from machine.Pin import callback [as 别名]
import network
import time
from config import Config
from wlanmanager import WLanManager
from machine import Pin
def toggle_wlan_mode(arg):
print('Toggle wlan')
getattr(arg, 'toggle')()
if __name__ == '__main__':
# Set up Button on Ext Board to toggle WLan AP
wlan = WLanManager()
button_s1 = Pin('P10', mode=Pin.IN, pull=Pin.PULL_UP)
button_s1.callback(Pin.IRQ_RISING, handler=toggle_wlan_mode, arg=wlan)
示例4: const
# 需要导入模块: from machine import Pin [as 别名]
# 或者: from machine.Pin import callback [as 别名]
#.........这里部分代码省略.........
# set the interrupt pin as active low and open drain
self.set_register(CTRL5_REG, 3, 0, 3)
# make a first read
self.acceleration()
def acceleration(self):
x = self.i2c.readfrom_mem(ACC_I2CADDR , ACC_X_L_REG, 2)
self.x = struct.unpack('<h', x)
y = self.i2c.readfrom_mem(ACC_I2CADDR , ACC_Y_L_REG, 2)
self.y = struct.unpack('<h', y)
z = self.i2c.readfrom_mem(ACC_I2CADDR , ACC_Z_L_REG, 2)
self.z = struct.unpack('<h', z)
_mult = self.SCALES[self.full_scale] / ACC_G_DIV
return (self.x[0] * _mult, self.y[0] * _mult, self.z[0] * _mult)
def roll(self):
x,y,z = self.acceleration()
rad = math.atan2(-x, z)
return (180 / math.pi) * rad
def pitch(self):
x,y,z = self.acceleration()
rad = -math.atan2(y, (math.sqrt(x*x + z*z)))
return (180 / math.pi) * rad
def set_register(self, register, value, offset, mask):
reg = bytearray(self.i2c.readfrom_mem(ACC_I2CADDR, register, 1))
reg[0] &= ~(mask << offset)
reg[0] |= ((value & mask) << offset)
self.i2c.writeto_mem(ACC_I2CADDR, register, reg)
def set_full_scale(self, scale):
self.set_register(CTRL4_REG, scale, 4, 3)
self.full_scale = scale
def set_odr(self, odr):
self.set_register(CTRL1_REG, odr, 4, 7)
self.odr = odr
def set_high_pass(self, hp):
self.set_register(CTRL2_REG, 1 if hp else 0, 2, 1)
def enable_activity_interrupt(self, threshold, duration, handler=None):
# Threshold is in mg, duration is ms
self.act_dur = duration
if threshold > self.SCALES[self.full_scale]:
error = "threshold %d exceeds full scale %d" % (thresold, self.SCALES[self.full_scale])
print(error)
raise ValueError(error)
if threshold < self.SCALES[self.full_scale] / 128:
error = "threshold %d below resolution %d" % (thresold, self.SCALES[self.full_scale]/128)
print(error)
raise ValueError(error)
if duration > 255 * 1000 * 8 / self.ODRS[self.odr]:
error = "duration %d exceeds max possible value %d" % (duration, 255 * 1000 * 8 / self.ODRS[self.odr])
print(error)
raise ValueError(error)
if duration < 1000 * 8 / self.ODRS[self.odr]:
error = "duration %d below resolution %d" % (duration, 1000 * 8 / self.ODRS[self.odr])
print(error)
raise ValueError(error)
_ths = int(127 * threshold / self.SCALES[self.full_scale]) & 0x7F
_dur = int((duration * self.ODRS[self.odr]) / 1000 / 8)
self.i2c.writeto_mem(ACC_I2CADDR, ACT_THS, _ths)
self.i2c.writeto_mem(ACC_I2CADDR, ACT_DUR, _dur)
# enable the activity/inactivity interrupt
self.set_register(CTRL3_REG, 1, 5, 1)
self._user_handler = handler
self.int_pin = Pin('P13', mode=Pin.IN)
self.int_pin.callback(trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING, handler=self._int_handler)
# return actual used thresold and duration
return (_ths * self.SCALES[self.full_scale] / 128, _dur * 8 * 1000 / self.ODRS[self.odr])
def activity(self):
if not self.debounced:
time.sleep_ms(self.act_dur)
self.debounced = True
if self.int_pin():
return True
return False
def _int_handler(self, pin_o):
if self._user_handler is not None:
self._user_handler(pin_o)
else:
if pin_o():
print('Activity interrupt')
else:
print('Inactivity interrupt')