fm.register定义函数
时间: 2023-04-06 09:04:00 浏览: 126
fm.register是Python中用于注册函数的语法。它可以将一个函数注册到一个特定的事件上,当该事件发生时,该函数将被调用。例如,可以使用fm.register将一个函数注册到按钮的单击事件上,当用户单击该按钮时,该函数将被调用。
相关问题
k210循迹小车代码
以下是使用 K210 MCU 和 MaixPy 编写的循迹小车代码,供您参考:
```python
# 导入相关库和模块
from fpioa_manager import fm
from board import board_info
from machine import UART
from machine import I2C
from machine import Timer
from fpioa_manager import *
from Maix import GPIO
import time
# 定义引脚
fm.register(35, fm.fpioa.I2C0_SCLK, force=True)
fm.register(34, fm.fpioa.I2C0_SDA, force=True)
fm.register(9, fm.fpioa.GPIO1, force=True)
fm.register(8, fm.fpioa.GPIO0, force=True)
fm.register(7, fm.fpioa.GPIO3, force=True)
fm.register(6, fm.fpioa.GPIO2, force=True)
# 初始化 I2C 和 GPIO
i2c = I2C(I2C.I2C0, freq=400000, scl=35, sda=34)
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
tim.init(period=20000, pulse_width_percent=0)
pin1 = GPIO(GPIO.GPIO1, GPIO.OUT)
pin2 = GPIO(GPIO.GPIO0, GPIO.OUT)
pin3 = GPIO(GPIO.GPIO3, GPIO.OUT)
pin4 = GPIO(GPIO.GPIO2, GPIO.OUT)
# 循迹函数
def track():
# 读取循迹传感器数据
data = i2c.readfrom(0x30, 1)
value = data[0]
# 根据传感器数据驱动小车
if value == 0x80:
pin1.value(1)
pin2.value(0)
pin3.value(0)
pin4.value(1)
elif value == 0x40:
pin1.value(1)
pin2.value(0)
pin3.value(0)
pin4.value(0)
elif value == 0x20:
pin1.value(0)
pin2.value(0)
pin3.value(0)
pin4.value(1)
elif value == 0x10:
pin1.value(0)
pin2.value(1)
pin3.value(0)
pin4.value(1)
elif value == 0x08:
pin1.value(0)
pin2.value(1)
pin3.value(1)
pin4.value(0)
elif value == 0x04:
pin1.value(0)
pin2.value(0)
pin3.value(1)
pin4.value(0)
else:
pin1.value(0)
pin2.value(0)
pin3.value(0)
pin4.value(0)
# 设置定时器,每隔一段时间调用循迹函数
tim.callback(track)
# 主循环
while True:
pass
```
该代码通过 I2C 读取循迹传感器的数据,并根据数据驱动小车进行循迹。定时器每隔一段时间调用循迹函数,从而实现小车的连续运动。您可以根据具体需求进行修改。
K210控制编码器电机的转向和转速python代码
以下是在MaixPy固件环境下使用K210控制编码器电机的转向和转速的Python代码示例:
```python
from machine import Timer,PWM
from fpioa_manager import fm
import time
#配置引脚
fm.register(19, fm.fpioa.GPIO2)#编码器引脚A
fm.register(20, fm.fpioa.GPIO3)#编码器引脚B
fm.register(22, fm.fpioa.GPIO4)#电机引脚A
fm.register(23, fm.fpioa.GPIO5)#电机引脚B
#设置GPIO口模式
encoder_pinA = GPIO(GPIO.GPIO2, GPIO.IN, GPIO.PULL_NONE)
encoder_pinB = GPIO(GPIO.GPIO3, GPIO.IN, GPIO.PULL_NONE)
motor_pinA = GPIO(GPIO.GPIO4, GPIO.OUT, GPIO.PULL_NONE)
motor_pinB = GPIO(GPIO.GPIO5, GPIO.OUT, GPIO.PULL_NONE)
#初始化PWM控制器
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
pwm = PWM(tim, freq=10000, duty=50, pin=22)
pwm2 = PWM(tim, freq=10000, duty=50, pin=23)
#定义转向和速度控制函数
def forward(speed):
motor_pinA.value(1)
motor_pinB.value(0)
pwm.duty(speed)
def backward(speed):
motor_pinA.value(0)
motor_pinB.value(1)
pwm.duty(speed)
def stop():
motor_pinA.value(0)
motor_pinB.value(0)
pwm.duty(0)
#定义编码器中断回调函数
def encoder_callback(pin):
global encoder_A_last
global encoder_B_last
global encoder_count
A = encoder_pinA.value()
B = encoder_pinB.value()
if (A != encoder_A_last):
if (B != A):
encoder_count += 1
else:
encoder_count -= 1
else:
if (B == A):
encoder_count += 1
else:
encoder_count -= 1
encoder_A_last = A
#设置编码器中断回调函数
encoder_A_last = encoder_pinA.value()
encoder_B_last = encoder_pinB.value()
encoder_count = 0
encoder_pinA.irq(trigger=GPIO.IRQ_BOTH, handler=encoder_callback)
#设置电机转向和速度
forward(50)
time.sleep(2)
backward(50)
time.sleep(2)
stop()
#读取编码器计数器值
print(encoder_count)
```
这段代码使用GPIO口控制电机的转向和PWM控制器控制电机的转速,同时使用GPIO口读取编码器的信号来计算电机的转速和转动方向。注意在使用编码器计数器时需要设置编码器引脚的中断回调函数。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)