试用计划里,本来有一个LCD时钟的,但经过了学习后,发现,行空板的unihiker库里,就支持模拟时钟的显示,只要读取一下系统时间,再配置一下显示就可以了。行空板连接网络后,系统时间自动与北京时间进行校对。
代码如下:
from unihiker import GUI #导入包
import datetime
gui=GUI() #实例化GUI类
clock=gui.draw_clock(x=120, y=160, r=80, h=10, m=8, s=0, color="#f8ad30", onclick=lambda: print("clock clicked"))
import time
while True:
now = datetime.datetime.now()
#print(now.strftime("%Y-%m-%d %H:%M:%S"))
#print(int(now.strftime("%H")))
clock.config(h=int(now.strftime("%H")),m=int(now.strftime("%M")),s=int(now.strftime("%S")))
#增加等待,防止程序退出和卡住
time.sleep(1)
效果如下:
ca516fe79cb08bb1e552d44540d19e4e
看上去有一些太简单了,所以,在这个基础上,再做一个蕃茄时钟。
蕃茄时钟功能:
按A开始工作,按B停止。
为了专心学习,不总是盯着时间看,没有找到可以关闭LCD屏背光的函数,所以设置行空板屏幕翻转,开始计时45分钟。
时间到后,响蜂鸣器,翻过行空板,开始计时15分钟休息。
15分钟时间到后,响蜂鸣器,屏幕翻转,重新计时45分钟,循环往复。
翻转功能,使用行空板上的六轴传感器完成,其实只要判断垂直方向上的加速度就可以了。
按键与蜂鸣器使用pinpong库。
代码如下,这里把时间调快了,方便进行演示。
# -*- coding: utf-8 -*-
import time
from pinpong.board import *
from pinpong.extension.unihiker import *
from unihiker import GUI #导入包
from threading import Timer
Board().begin() #初始化
gui=GUI() #实例化GUI类
#对应的工作与休息时间设置
work_min=45
work_sec=0
relax_min=15
relax_sec =0
min=work_min
sec=work_sec
s="%2d:"%min+'{:0>2d}'.format(sec)
times=gui.draw_text(x=120, y=160, text=s, font_size=40,origin = "center",color="red")
state=gui.draw_text(x=120, y=50, text='工作中...', font_size=20,origin = "center",color="green")
work_flag=False
time_over=False
def time_down():
global sec
global min
if (sec > 0 or min >0):
sec-=1
if(sec<0):
sec=59
min-=1
if min==0 and sec ==0:
return 1
else:
return 0
def work(var):
global time_over
global work_flag
global sec
global min
if work_flag==True:
if accelerometer.get_z()<0 and (sec > 0 or min >0) and time_over == False:
if time_down()==1:
time_over=True
state.config(text='休息一下')
print("工作时间结束")
#蜂鸣器
if accelerometer.get_z()>0 and (sec > 0 or min >0) and time_over == True:
if time_down()==1:
time_over=False
state.config(text='开始工作了')
print("休息时间结束")
#蜂鸣器
s="%2d:"%min+'{:0>2d}'.format(sec)
times.config(text=s)
#print(accelerometer.get_z())
#print(time_over)
t=Timer(var,work,args=(var,))
t.start()
work(0.01)#时间要修改成1
while True:
if button_a.is_pressed() == True:
work_flag=True
#set time 45
print("按钮A按下")
if button_b.is_pressed() == True:
work_flag=False
time_over=False
print("按钮B按下")
min=work_min
sec=0
s="%2d:"%min+'{:0>2d}'.format(sec)
times.config(text=s)
if time_over==True and accelerometer.get_z()>0 and min==0 and sec==0:
min=relax_min
sec=relax_sec
if time_over==False and accelerometer.get_z()>0 and min==0 and sec==0:
min=work_min
sec=work_sec
time.sleep(0.05)
运行效果:
cb3d6a84e90fd1c0e237537380aa8fca