定时器

例程讲解

该例程在 例程的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

实验准备

  1. 野火K210 AI视觉相机 连接到 CanMV IDE

  2. 执行程序

运行结果

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块中发生的异常。

  • ``timer.deinit() ``:停止定时器。

  • del timer :删除定时器对象。