parent
018f993154
commit
adee8b7b0f
@ -0,0 +1,92 @@ |
||||
import time |
||||
import gex |
||||
|
||||
WK_TIME = 25 |
||||
BK_TIME = 5 |
||||
LIGHT_CNT = 30 |
||||
|
||||
PH_BREAK = 'Break' |
||||
PH_BREAK_OVER = 'BreakOver' |
||||
PH_WORK = 'Work' |
||||
PH_WORK_OVER = 'WorkOver' |
||||
|
||||
class Pymodoro: |
||||
def __init__(self): |
||||
self.phase = PH_BREAK_OVER |
||||
self.work_s = 0 |
||||
self.break_s = 0 |
||||
self.colors = [0x000000 for _ in range(0, LIGHT_CNT)] |
||||
|
||||
client = gex.Client(gex.TrxRawUSB()) |
||||
self.btn = gex.DIn(client, 'btn') |
||||
self.neo = gex.Neopixel(client, 'neo') |
||||
self.btn.on_trigger([0], self.on_btn) |
||||
|
||||
self.switch(PH_BREAK_OVER) |
||||
self.display() |
||||
|
||||
def display(self): |
||||
self.neo.load(self.colors) |
||||
|
||||
def on_btn(self, snapshot, timestamp): |
||||
if self.phase == PH_BREAK_OVER: |
||||
self.switch(PH_WORK) |
||||
|
||||
elif self.phase == PH_WORK: |
||||
self.switch(PH_WORK) # restart |
||||
|
||||
elif self.phase == PH_WORK_OVER: |
||||
self.switch(PH_BREAK) |
||||
|
||||
def switch(self, phase): |
||||
print("Switch to %s" % phase) |
||||
|
||||
if phase == PH_BREAK: |
||||
self.colors = [0x009900 for _ in range(0, LIGHT_CNT)] |
||||
self.break_s = BK_TIME * 60 |
||||
|
||||
elif phase == PH_BREAK_OVER: |
||||
self.colors = [0x662200 for _ in range(0, LIGHT_CNT)] |
||||
|
||||
elif phase == PH_WORK: |
||||
self.colors = [0x990000 for _ in range(0, LIGHT_CNT)] |
||||
self.work_s = WK_TIME * 60 |
||||
|
||||
elif phase == PH_WORK_OVER: |
||||
self.colors = [0x113300 for _ in range(0, LIGHT_CNT)] |
||||
|
||||
self.phase = phase |
||||
|
||||
def extinguish(self, dark, total): |
||||
per_light = total / LIGHT_CNT |
||||
lights = int((dark + per_light / 2) / per_light) |
||||
for n in range(0, LIGHT_CNT - lights): |
||||
self.colors[n] = 0x000000 |
||||
|
||||
def tick(self): |
||||
if self.phase == PH_BREAK: |
||||
self.break_s -= 1 |
||||
print("Break remain: %d s" % self.break_s) |
||||
self.extinguish(self.break_s, BK_TIME * 60) |
||||
|
||||
if self.break_s == 0: |
||||
self.switch(PH_BREAK_OVER) |
||||
|
||||
elif self.phase == PH_WORK: |
||||
self.work_s -= 1 |
||||
print("Work remain: %d s" % self.work_s) |
||||
self.extinguish(self.work_s, WK_TIME * 60) |
||||
|
||||
if self.work_s == 0: |
||||
self.switch(PH_WORK_OVER) |
||||
|
||||
self.display() |
||||
|
||||
def run(self): |
||||
while True: |
||||
time.sleep(1) |
||||
self.tick() |
||||
|
||||
|
||||
a = Pymodoro() |
||||
a.run() |
Loading…
Reference in new issue