5152| 5
|
[入门教程] 【掌控】新技能: clock--模拟时钟 |
本帖最后由 rzyzzxw 于 2018-12-27 08:54 编辑 冬至,学习正好。 继续GET掌控新技能:Clock类 模拟钟表显示功能 【小提示】Clock类需要最新版mpython V 1.0掌控基础库支持。 【小资料】 UI.Clock(x, y, radius) 构建Clock对象。 UI.settime() 获取本地时间并设置模拟钟表时间 UI.drawClock()绘制钟表 UI.clear()清除钟表
[mw_shl_code=python,true]from mpython import * from machine iamport Timer clock=UI.Clock(64,32,30) def Refresh(_): clock.settime() clock.drawClock() oled.show() clock.clear() tim1 = Timer(1) tim1.init(period=1000, mode=Timer.PERIODIC, callback=Refresh)[/mw_shl_code] 当前这个钟表还不准哈,默认从0点0分开始工作,不要紧哈,先有个钟表的样子,后面在网络部分再校准它。 from mpython import * 导入掌控基础库 from machine import Timer 导入micropython硬件定时器:处理周期和事件的时间 clock=UI.Clock(64,32,30) 定义变量,钟表的中心点和半径 def Refresh(_): #定义定时器回调函数 clock.settime() 获取本地时间并设置模拟钟表时间 clock.drawClock() 绘制钟表 oled.show() 显示 clock.clear() 清除钟表 tim1 = Timer(1) #创建定时器1 tim1.init(period=1000, mode=Timer.PERIODIC, callback=lambda _:Refresh()) #配置定时器,模式为循环执行,循环周期为1秒 最后一句最长也最要学习。 Timer.init(*, mode=Timer.PERIODIC, period=-1, callback=None) 初始化计时器 period=1000,周期1000ms mode 可以是以下之一: Timer.ONE_SHOT - 计时器运行一次,直到配置完毕通道的期限到期。 Timer.PERIODIC - 定时器以通道的配置频率定期运行。 本例中定时器以通道的配置频率1000ms定期运行 callback=Refresh CALLBACK,回调函数就是一个通过函数指针调用的函数。 总结一下,这一句就是说计时器以配置频率1000ms定期运行回调上面的时钟显示函数。 【小资料】 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 够烧脑了,吃个饺子补补去。 【12.24更新】 【关于报错261】 【以下内容全部来自工程师】 我把程序稍微改了点,不能实时运行的原因,它这次报的错误比较特别,是OSError 261,我查了一下micropython好像同时运行两个时钟会冲突。 报错就是261 运行并没有抵消main.py,如果mian.py里面存在时钟,再运行就会出错,但是刷入,好像是可以的 要硬重启(按下reset) 我这里的情况是:出现OSError 261就要硬重启 如果单纯使用刷入功能,就不需要硬重启 运行实际是驻留在内存里面的,因此连续运行两次时钟程序会出错 【12.25更新】 mpython2基础库已经更新到1.0.1,可以直接从软件刷最新库了。 掌控1.0.1固件已经推送,重新打开mPython2软件即可收到 1.0.1固件默认内置了mpython.py(基础库)、tinywebio.py(与app inventor通讯)、labplus_handpy_online.py(掌控在线协议,无需设为默认,用Labplus软件可以直接激活) 注意:板上的代码要备份一下再更新固件,不然会丢掉 |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed