定时器¶
例程讲解¶
该例程在 例程的xxx ,可以在 CanMV IDE
中打开
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import time
import sensor
import lcd
from machine import Timer
from board import board_info
from fpioa_manager import fm
from maix import GPIO
status = 0
fm.register(board_info.USER_LED, fm.fpioa.GPIOHS1, force=True)
led = GPIO(GPIO.GPIOHS1, GPIO.OUT)
def on_timer(timer):
global status
status = 0 if (status == 1) else 1
led.value(status)
timer = Timer(Timer.TIMER0, Timer.CHANNEL0,
mode=Timer.MODE_PERIODIC, period=200,
unit=Timer.UNIT_MS, callback=on_timer, arg=None)
lcd.init()
sensor.reset(dual_buff=True)
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 1000)
try:
while True:
img = sensor.snapshot()
lcd.display(img)
except:
timer.deinit()
del timer
|
实验准备¶
将
野火K210 AI视觉相机
连接到CanMV IDE
执行程序
运行结果¶
1.运行之后, 野火K210 AI视觉相机
背面的绿色led灯每隔300ms会切换亮灭状态
2.在灯闪的同时屏幕也在捕捉摄像头捕捉的图像
程序分析¶
1 2 3 4 5 6 7 | import time
import sensor
import lcd
from machine import Timer
from board import board_info
from fpioa_manager import fm
from maix import GPIO
|
from machine import Timer
:导入Timer类,用于创建定时器。import time
:导入Python的时间模块,尽管在这个脚本中并没有直接使用。import sensor
:导入用于控制图像传感器的模块。import lcd
:导入用于控制LCD显示屏的模块。from board import board_info
:从board模块导入board_info对象,其中包含了开发板的相关信息。from fpioa_manager import fm
:导入fpioa_manager模块中的fm对象,用于管理管脚映射。from maix import GPIO
:从maix模块导入GPIO类,用于控制通用输入输出。
1 2 3 4 5 6 7 8 9 10 11 12 | status = 0
fm.register(board_info.USER_LED, fm.fpioa.GPIOHS1, force=True)
led = GPIO(GPIO.GPIOHS1, GPIO.OUT)
def on_timer(timer):
global status
status = 0 if (status == 1) else 1
led.value(status)
timer = Timer(Timer.TIMER0, Timer.CHANNEL0,
mode=Timer.MODE_PERIODIC, period=200,
unit=Timer.UNIT_MS, callback=on_timer, arg=None)
|
status = 0
:初始化LED的状态为关闭。fm.register(board_info.USER_LED, fm.fpioa.GPIOHS1, force=True)
:将USER_LED对应的管脚映射到GPIOHS1(高速度GPIO)。led = GPIO(GPIO.GPIOHS1, GPIO.OUT)
:初始化GPIOHS1管脚作为输出,并创建一个名为led的GPIO对象。def on_timer(timer)
:定义一个定时器回调函数on_timer。global status
声明status为全局变量。status = 0 if (status == 1) else 1
:更新status变量的值,如果当前为1则变为0,否则变为1。led.value(status)
:设置LED的状态为新的status值。timer = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PERIODIC, period=200, unit=Timer.UNIT_MS, callback=on_timer, arg=None)
:创建一个周期性定时器,每200毫秒触发一次on_timer回调函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | lcd.init()
sensor.reset(dual_buff=True)
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 1000)
try:
while True:
img = sensor.snapshot()
lcd.display(img)
except:
timer.deinit()
del timer
|
lcd.init()
:初始化LCD显示屏。sensor.reset(dual_buff=True)
:重置图像传感器,并启用双缓冲,以提高图像处理的效率。sensor.set_pixformat(sensor.RGB565)
:设置图像传感器的像素格式为RGB565。sensor.set_framesize(sensor.QVGA)
:设置图像传感器的帧大小为QVGA(320x240像素)。sensor.skip_frames(time = 1000)
:跳过1000毫秒内的帧,等待传感器稳定。try:
:开始一个try块,用于捕获异常。while True:
:开始一个无限循环。img = sensor.snapshot()
:从图像传感器捕获一帧图像。lcd.display(img)
:将捕获的图像显示在LCD上。except:
捕获任何在try块中发生的异常。del timer
:删除定时器对象。