Yoshihiro Sato
Published © GPL3+

I made a super cool coffee scale

I created a smart coffee scale with M5Stack! A project for the #M5StackInnovationContest that shows anyone can be a creator.

BeginnerWork in progress2 hours114
I made a super cool coffee scale

Things used in this project

Hardware components

M5Stack M5TAB5
×1
Mini Weight Unit HX711 Module Sensor
M5Stack Mini Weight Unit HX711 Module Sensor
×1
5KG Load Cell and HX711 Module Kit
×1

Software apps and online services

M5Stack UIFlow 2.0

Story

Read more

Schematics

CoffeeScale.m5f2

Just build the blocks like this in UIFlow2.0, and it will work.

Code

CoffeeScale.py

MicroPython
This MicroPython code was automatically generated by UIFlow. It can be directly pasted into UIFlow2.0 and will run without any modifications.
import os, sys, io
import M5
from M5 import *
import m5ui
import lvgl as lv
from unit import WeightUnit
import time



page0 = None
lab_time0 = None
TimeBG = None
switchOpton = None
BTNreset = None
lab_Option = None
TimeLabel = None
lab_Temp = None
slider0 = None
switch0 = None
arc0 = None
lab_Driper = None
Temp = None
switch1 = None
lab_time30 = None
barDripper = None
slider30 = None
slider60 = None
slider90 = None
slider120 = None
slider150 = None
slider180 = None
slider210 = None
slider240 = None
slider270 = None
slider300 = None
lab_time150 = None
lab_time210 = None
lab_time270 = None
lab_time90 = None
lab_time60 = None
lab_time120 = None
lab_time180 = None
lab_time240 = None
lab_time300 = None
BTNstart = None
canvas0 = None
lab_Waight = None
lab_beansWeight = None
ScaleBar = None
label1 = None
label2 = None
label3 = None
lab_ScaleMB = None
lab_Scale0B = None
lab_beansWlb = None
BTN_beans = None
lab_Retiolb = None
lab_Recio = None
weight_0 = None


import math

x = None
Weight = None
valSTR = None
beansWeight = None
initWeight = None
scaleOn = None
startTime = None
nowtime = None
nowWeight = None
TimeMM = None
TimeSS = None
maxWeight = None
nowScale = None
TimeStr = None
scaleSTR = None
befourTime = None

# Describe this function...
def getWeight():
  global x, Weight, valSTR, beansWeight, initWeight, scaleOn, startTime, nowtime, nowWeight, TimeMM, TimeSS, maxWeight, nowScale, TimeStr, scaleSTR, befourTime, page0, lab_time0, TimeBG, switchOpton, BTNreset, lab_Option, TimeLabel, lab_Temp, slider0, switch0, arc0, lab_Driper, Temp, switch1, lab_time30, barDripper, slider30, slider60, slider90, slider120, slider150, slider180, slider210, slider240, slider270, slider300, lab_time150, lab_time210, lab_time270, lab_time90, lab_time60, lab_time120, lab_time180, lab_time240, lab_time300, BTNstart, canvas0, lab_Waight, lab_beansWeight, ScaleBar, label1, label2, label3, lab_ScaleMB, lab_Scale0B, lab_beansWlb, BTN_beans, lab_Retiolb, lab_Recio, weight_0
  Weight = (initWeight - (weight_0.get_scale_weight)) * 1.41
  Weight = round(min(max(Weight / 1000, 0), 5000), 1)
  return Weight

# Describe this function...
def TEXTFORMAT(x):
  global Weight, valSTR, beansWeight, initWeight, scaleOn, startTime, nowtime, nowWeight, TimeMM, TimeSS, maxWeight, nowScale, TimeStr, scaleSTR, befourTime, page0, lab_time0, TimeBG, switchOpton, BTNreset, lab_Option, TimeLabel, lab_Temp, slider0, switch0, arc0, lab_Driper, Temp, switch1, lab_time30, barDripper, slider30, slider60, slider90, slider120, slider150, slider180, slider210, slider240, slider270, slider300, lab_time150, lab_time210, lab_time270, lab_time90, lab_time60, lab_time120, lab_time180, lab_time240, lab_time300, BTNstart, canvas0, lab_Waight, lab_beansWeight, ScaleBar, label1, label2, label3, lab_ScaleMB, lab_Scale0B, lab_beansWlb, BTN_beans, lab_Retiolb, lab_Recio, weight_0
  if (str(x)).count('.') == 0:
    valSTR = (str(x) + str('.0'))
  else:
    valSTR = x
  return valSTR

# Describe this function...
def SlideScale():
  global x, Weight, valSTR, beansWeight, initWeight, scaleOn, startTime, nowtime, nowWeight, TimeMM, TimeSS, maxWeight, nowScale, TimeStr, scaleSTR, befourTime, page0, lab_time0, TimeBG, switchOpton, BTNreset, lab_Option, TimeLabel, lab_Temp, slider0, switch0, arc0, lab_Driper, Temp, switch1, lab_time30, barDripper, slider30, slider60, slider90, slider120, slider150, slider180, slider210, slider240, slider270, slider300, lab_time150, lab_time210, lab_time270, lab_time90, lab_time60, lab_time120, lab_time180, lab_time240, lab_time300, BTNstart, canvas0, lab_Waight, lab_beansWeight, ScaleBar, label1, label2, label3, lab_ScaleMB, lab_Scale0B, lab_beansWlb, BTN_beans, lab_Retiolb, lab_Recio, weight_0
  if int(nowtime / 30)==0:
    slider0.set_value(int(nowWeight), True)
  elif int(nowtime / 30)==1:
    slider30.set_value(int(nowWeight), True)
  elif int(nowtime / 30)==2:
    slider60.set_value(int(nowWeight), True)
  elif int(nowtime / 30)==3:
    slider90.set_value(int(nowWeight), True)
  elif int(nowtime / 30)==4:
    slider120.set_value(int(nowWeight), True)
  elif int(nowtime / 30)==5:
    slider180.set_value(int(nowWeight), True)
  elif int(nowtime / 30)==6:
    slider210.set_value(int(nowWeight), True)
  elif int(nowtime / 30)==7:
    slider240.set_value(int(nowWeight), True)
  elif int(nowtime / 30)==8:
    slider270.set_value(int(nowWeight), True)
  else:
    slider300.set_value(int(nowWeight), True)


def BTN_beans_clicked_event(event_struct):
  global page0, lab_time0, TimeBG, switchOpton, BTNreset, lab_Option, TimeLabel, lab_Temp, slider0, switch0, arc0, lab_Driper, Temp, switch1, lab_time30, barDripper, slider30, slider60, slider90, slider120, slider150, slider180, slider210, slider240, slider270, slider300, lab_time150, lab_time210, lab_time270, lab_time90, lab_time60, lab_time120, lab_time180, lab_time240, lab_time300, BTNstart, canvas0, lab_Waight, lab_beansWeight, ScaleBar, label1, label2, label3, lab_ScaleMB, lab_Scale0B, lab_beansWlb, BTN_beans, lab_Retiolb, lab_Recio, weight_0, Weight, valSTR, beansWeight, initWeight, scaleOn, x, startTime, nowtime, nowWeight, TimeMM, TimeSS, maxWeight, nowScale, TimeStr, scaleSTR, befourTime

  beansWeight = 0
  for count in range(10):
    beansWeight = beansWeight + getWeight()
  beansWeight = beansWeight / 10
  beansWeight = round(beansWeight, 1)
  lab_beansWeight.set_text(str((str(beansWeight) + str('g'))))


def BTNreset_clicked_event(event_struct):
  global page0, lab_time0, TimeBG, switchOpton, BTNreset, lab_Option, TimeLabel, lab_Temp, slider0, switch0, arc0, lab_Driper, Temp, switch1, lab_time30, barDripper, slider30, slider60, slider90, slider120, slider150, slider180, slider210, slider240, slider270, slider300, lab_time150, lab_time210, lab_time270, lab_time90, lab_time60, lab_time120, lab_time180, lab_time240, lab_time300, BTNstart, canvas0, lab_Waight, lab_beansWeight, ScaleBar, label1, label2, label3, lab_ScaleMB, lab_Scale0B, lab_beansWlb, BTN_beans, lab_Retiolb, lab_Recio, weight_0, Weight, valSTR, beansWeight, initWeight, scaleOn, x, startTime, nowtime, nowWeight, TimeMM, TimeSS, maxWeight, nowScale, TimeStr, scaleSTR, befourTime

  initWeight = weight_0.get_scale_weight
  ScaleBar.set_range(0, 50)
  lab_ScaleMB.set_text(str('50ml'))
  slider0.set_value(0, True)
  slider30.set_value(0, True)
  slider60.set_value(0, True)
  slider90.set_value(0, True)
  slider120.set_value(0, True)
  slider150.set_value(0, True)
  slider180.set_value(0, True)
  slider210.set_value(0, True)
  slider240.set_value(0, True)
  slider270.set_value(0, True)
  slider300.set_value(0, True)


def BTNstart_clicked_event(event_struct):
  global page0, lab_time0, TimeBG, switchOpton, BTNreset, lab_Option, TimeLabel, lab_Temp, slider0, switch0, arc0, lab_Driper, Temp, switch1, lab_time30, barDripper, slider30, slider60, slider90, slider120, slider150, slider180, slider210, slider240, slider270, slider300, lab_time150, lab_time210, lab_time270, lab_time90, lab_time60, lab_time120, lab_time180, lab_time240, lab_time300, BTNstart, canvas0, lab_Waight, lab_beansWeight, ScaleBar, label1, label2, label3, lab_ScaleMB, lab_Scale0B, lab_beansWlb, BTN_beans, lab_Retiolb, lab_Recio, weight_0, Weight, valSTR, beansWeight, initWeight, scaleOn, x, startTime, nowtime, nowWeight, TimeMM, TimeSS, maxWeight, nowScale, TimeStr, scaleSTR, befourTime

  if (BTNstart.get_btn_text()) == 'Start':
    scaleOn = True
    startTime = time.time()
    TimeLabel.set_flag(lv.obj.FLAG.HIDDEN, False)
    BTNstart.set_btn_text(str('Stop'))
    BTNstart.set_text_color(0xff0000, 255, lv.PART.MAIN | lv.STATE.DEFAULT)
  else:
    scaleOn = False
    nowtime = 0
    TimeLabel.set_flag(lv.obj.FLAG.HIDDEN, True)
    BTNstart.set_btn_text(str('Start'))
    BTNstart.set_text_color(0xffffff, 255, lv.PART.MAIN | lv.STATE.DEFAULT)


def switchOpton_checked_event(event_struct):
  global page0, lab_time0, TimeBG, switchOpton, BTNreset, lab_Option, TimeLabel, lab_Temp, slider0, switch0, arc0, lab_Driper, Temp, switch1, lab_time30, barDripper, slider30, slider60, slider90, slider120, slider150, slider180, slider210, slider240, slider270, slider300, lab_time150, lab_time210, lab_time270, lab_time90, lab_time60, lab_time120, lab_time180, lab_time240, lab_time300, BTNstart, canvas0, lab_Waight, lab_beansWeight, ScaleBar, label1, label2, label3, lab_ScaleMB, lab_Scale0B, lab_beansWlb, BTN_beans, lab_Retiolb, lab_Recio, weight_0, Weight, valSTR, beansWeight, initWeight, scaleOn, x, startTime, nowtime, nowWeight, TimeMM, TimeSS, maxWeight, nowScale, TimeStr, scaleSTR, befourTime
  if switch0.has_state(lv.STATE.CHECKED):
    barDripper.set_flag(lv.obj.FLAG.HIDDEN, False)
  if switch1.has_state(lv.STATE.CHECKED):
    Temp.set_flag(lv.obj.FLAG.HIDDEN, False)
    arc0.set_flag(lv.obj.FLAG.HIDDEN, False)


def switchOpton_unchecked_event(event_struct):
  global page0, lab_time0, TimeBG, switchOpton, BTNreset, lab_Option, TimeLabel, lab_Temp, slider0, switch0, arc0, lab_Driper, Temp, switch1, lab_time30, barDripper, slider30, slider60, slider90, slider120, slider150, slider180, slider210, slider240, slider270, slider300, lab_time150, lab_time210, lab_time270, lab_time90, lab_time60, lab_time120, lab_time180, lab_time240, lab_time300, BTNstart, canvas0, lab_Waight, lab_beansWeight, ScaleBar, label1, label2, label3, lab_ScaleMB, lab_Scale0B, lab_beansWlb, BTN_beans, lab_Retiolb, lab_Recio, weight_0, Weight, valSTR, beansWeight, initWeight, scaleOn, x, startTime, nowtime, nowWeight, TimeMM, TimeSS, maxWeight, nowScale, TimeStr, scaleSTR, befourTime
  barDripper.set_flag(lv.obj.FLAG.HIDDEN, True)
  Temp.set_flag(lv.obj.FLAG.HIDDEN, True)
  arc0.set_flag(lv.obj.FLAG.HIDDEN, True)


def BTN_beans_event_handler(event_struct):
  global page0, lab_time0, TimeBG, switchOpton, BTNreset, lab_Option, TimeLabel, lab_Temp, slider0, switch0, arc0, lab_Driper, Temp, switch1, lab_time30, barDripper, slider30, slider60, slider90, slider120, slider150, slider180, slider210, slider240, slider270, slider300, lab_time150, lab_time210, lab_time270, lab_time90, lab_time60, lab_time120, lab_time180, lab_time240, lab_time300, BTNstart, canvas0, lab_Waight, lab_beansWeight, ScaleBar, label1, label2, label3, lab_ScaleMB, lab_Scale0B, lab_beansWlb, BTN_beans, lab_Retiolb, lab_Recio, weight_0, Weight, valSTR, beansWeight, initWeight, scaleOn, x, startTime, nowtime, nowWeight, TimeMM, TimeSS, maxWeight, nowScale, TimeStr, scaleSTR, befourTime
  event = event_struct.code
  if event == lv.EVENT.CLICKED and True:
    BTN_beans_clicked_event(event_struct)
  return

def BTNreset_event_handler(event_struct):
  global page0, lab_time0, TimeBG, switchOpton, BTNreset, lab_Option, TimeLabel, lab_Temp, slider0, switch0, arc0, lab_Driper, Temp, switch1, lab_time30, barDripper, slider30, slider60, slider90, slider120, slider150, slider180, slider210, slider240, slider270, slider300, lab_time150, lab_time210, lab_time270, lab_time90, lab_time60, lab_time120, lab_time180, lab_time240, lab_time300, BTNstart, canvas0, lab_Waight, lab_beansWeight, ScaleBar, label1, label2, label3, lab_ScaleMB, lab_Scale0B, lab_beansWlb, BTN_beans, lab_Retiolb, lab_Recio, weight_0, Weight, valSTR, beansWeight, initWeight, scaleOn, x, startTime, nowtime, nowWeight, TimeMM, TimeSS, maxWeight, nowScale, TimeStr, scaleSTR, befourTime
  event = event_struct.code
  if event == lv.EVENT.CLICKED and True:
    BTNreset_clicked_event(event_struct)
  return

def BTNstart_event_handler(event_struct):
  global page0, lab_time0, TimeBG, switchOpton, BTNreset, lab_Option, TimeLabel, lab_Temp, slider0, switch0, arc0, lab_Driper, Temp, switch1, lab_time30, barDripper, slider30, slider60, slider90, slider120, slider150, slider180, slider210, slider240, slider270, slider300, lab_time150, lab_time210, lab_time270, lab_time90, lab_time60, lab_time120, lab_time180, lab_time240, lab_time300, BTNstart, canvas0, lab_Waight, lab_beansWeight, ScaleBar, label1, label2, label3, lab_ScaleMB, lab_Scale0B, lab_beansWlb, BTN_beans, lab_Retiolb, lab_Recio, weight_0, Weight, valSTR, beansWeight, initWeight, scaleOn, x, startTime, nowtime, nowWeight, TimeMM, TimeSS, maxWeight, nowScale, TimeStr, scaleSTR, befourTime
  event = event_struct.code
  if event == lv.EVENT.CLICKED and True:
    BTNstart_clicked_event(event_struct)
  return

def switchOpton_event_handler(event_struct):
  global page0, lab_time0, TimeBG, switchOpton, BTNreset, lab_Option, TimeLabel, lab_Temp, slider0, switch0, arc0, lab_Driper, Temp, switch1, lab_time30, barDripper, slider30, slider60, slider90, slider120, slider150, slider180, slider210, slider240, slider270, slider300, lab_time150, lab_time210, lab_time270, lab_time90, lab_time60, lab_time120, lab_time180, lab_time240, lab_time300, BTNstart, canvas0, lab_Waight, lab_beansWeight, ScaleBar, label1, label2, label3, lab_ScaleMB, lab_Scale0B, lab_beansWlb, BTN_beans, lab_Retiolb, lab_Recio, weight_0, Weight, valSTR, beansWeight, initWeight, scaleOn, x, startTime, nowtime, nowWeight, TimeMM, TimeSS, maxWeight, nowScale, TimeStr, scaleSTR, befourTime
  event = event_struct.code
  obj = event_struct.get_target_obj()
  if event == lv.EVENT.VALUE_CHANGED:
    if obj.has_state(lv.STATE.CHECKED):
      switchOpton_checked_event(event_struct)
    else:
      switchOpton_unchecked_event(event_struct)
  return

def setup():
  global page0, lab_time0, TimeBG, switchOpton, BTNreset, lab_Option, TimeLabel, lab_Temp, slider0, switch0, arc0, lab_Driper, Temp, switch1, lab_time30, barDripper, slider30, slider60, slider90, slider120, slider150, slider180, slider210, slider240, slider270, slider300, lab_time150, lab_time210, lab_time270, lab_time90, lab_time60, lab_time120, lab_time180, lab_time240, lab_time300, BTNstart, canvas0, lab_Waight, lab_beansWeight, ScaleBar, label1, label2, label3, lab_ScaleMB, lab_Scale0B, lab_beansWlb, BTN_beans, lab_Retiolb, lab_Recio, weight_0, Weight, valSTR, beansWeight, initWeight, scaleOn, x, startTime, nowtime, nowWeight, TimeMM, TimeSS, maxWeight, nowScale, TimeStr, scaleSTR, befourTime

  M5.begin()
  Widgets.setRotation(3)
  m5ui.init()
  page0 = m5ui.M5Page(bg_c=0xffffff)
  lab_time0 = m5ui.M5Label("0:00", x=40, y=630, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  TimeBG = m5ui.M5Canvas(x=36, y=39, w=236, h=85, color_format=lv.COLOR_FORMAT.ARGB8888, bg_c=0x031600, bg_opa=255, parent=page0)
  switchOpton = m5ui.M5Switch(x=1164, y=255, w=59, h=29, bg_c=0xe7e3e7, bg_c_checked=0x2196f3, circle_c=0xffffff, parent=page0)
  BTNreset = m5ui.M5Button(text="Reset", x=1080, y=40, bg_c=0x00cccc, text_c=0xffffff, font=lv.font_montserrat_48, parent=page0)
  lab_Option = m5ui.M5Label("Option", x=1011, y=255, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_36, parent=page0)
  TimeLabel = m5ui.M5Label("11:11", x=77, y=54, text_c=0x15bd00, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_48, parent=page0)
  lab_Temp = m5ui.M5Label("Temp", x=1011, y=313, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_36, parent=page0)
  slider0 = m5ui.M5Slider(x=49, y=299, w=5, h=300, mode=lv.slider.MODE.NORMAL, min_value=0, max_value=500, value=0, bg_c=0x2193f3, color=0x2193f3, parent=page0)
  switch0 = m5ui.M5Switch(x=1164, y=313, w=59, h=29, bg_c=0xe7e3e7, bg_c_checked=0x2196f3, circle_c=0xffffff, parent=page0)
  arc0 = m5ui.M5Arc(x=1062, y=505, w=200, h=200, value=50, min_value=0, max_value=100, rotation=0, mode=lv.arc.MODE.NORMAL, bg_c=0xe7e3e7, bg_c_indicator=0xf32121, bg_c_knob=0xf32121, parent=page0)
  lab_Driper = m5ui.M5Label("Driper", x=1014, y=364, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_36, parent=page0)
  Temp = m5ui.M5Label("0.0C", x=1083, y=579, text_c=0xff0000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_48, parent=page0)
  switch1 = m5ui.M5Switch(x=1164, y=364, w=59, h=29, bg_c=0xe7e3e7, bg_c_checked=0x2196f3, circle_c=0xffffff, parent=page0)
  lab_time30 = m5ui.M5Label("0:30", x=88, y=660, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  barDripper = m5ui.M5Bar(x=958, y=478, w=58, h=219, min_value=0, max_value=50, value=25, bg_c=0x00ffcf, color=0x00ffcf, parent=page0)
  slider30 = m5ui.M5Slider(x=100, y=299, w=5, h=300, mode=lv.slider.MODE.NORMAL, min_value=0, max_value=500, value=0, bg_c=0x2193f3, color=0x2193f3, parent=page0)
  slider60 = m5ui.M5Slider(x=150, y=299, w=5, h=300, mode=lv.slider.MODE.NORMAL, min_value=0, max_value=500, value=0, bg_c=0x2193f3, color=0x2193f3, parent=page0)
  slider90 = m5ui.M5Slider(x=200, y=299, w=5, h=300, mode=lv.slider.MODE.NORMAL, min_value=0, max_value=500, value=0, bg_c=0x2193f3, color=0x2193f3, parent=page0)
  slider120 = m5ui.M5Slider(x=250, y=299, w=5, h=300, mode=lv.slider.MODE.NORMAL, min_value=0, max_value=500, value=0, bg_c=0x2193f3, color=0x2193f3, parent=page0)
  slider150 = m5ui.M5Slider(x=300, y=299, w=5, h=300, mode=lv.slider.MODE.NORMAL, min_value=0, max_value=500, value=0, bg_c=0x2193f3, color=0x2193f3, parent=page0)
  slider180 = m5ui.M5Slider(x=349, y=299, w=5, h=300, mode=lv.slider.MODE.NORMAL, min_value=0, max_value=500, value=0, bg_c=0x2193f3, color=0x2193f3, parent=page0)
  slider210 = m5ui.M5Slider(x=399, y=299, w=5, h=300, mode=lv.slider.MODE.NORMAL, min_value=0, max_value=500, value=0, bg_c=0x2193f3, color=0x2193f3, parent=page0)
  slider240 = m5ui.M5Slider(x=450, y=299, w=5, h=300, mode=lv.slider.MODE.NORMAL, min_value=0, max_value=500, value=0, bg_c=0x2193f3, color=0x2193f3, parent=page0)
  slider270 = m5ui.M5Slider(x=498, y=299, w=5, h=300, mode=lv.slider.MODE.NORMAL, min_value=0, max_value=500, value=0, bg_c=0x2193f3, color=0x2193f3, parent=page0)
  slider300 = m5ui.M5Slider(x=550, y=299, w=5, h=300, mode=lv.slider.MODE.NORMAL, min_value=0, max_value=500, value=0, bg_c=0x2193f3, color=0x2193f3, parent=page0)
  lab_time150 = m5ui.M5Label("2:30", x=300, y=660, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  lab_time210 = m5ui.M5Label("3:30", x=400, y=660, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  lab_time270 = m5ui.M5Label("4:30", x=500, y=660, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  lab_time90 = m5ui.M5Label("1:30", x=200, y=660, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  lab_time60 = m5ui.M5Label("1:00", x=150, y=630, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  lab_time120 = m5ui.M5Label("2:00", x=250, y=630, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  lab_time180 = m5ui.M5Label("3:00", x=350, y=630, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  lab_time240 = m5ui.M5Label("4:00", x=450, y=630, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  lab_time300 = m5ui.M5Label("5:00", x=550, y=630, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  BTNstart = m5ui.M5Button(text="Start", x=1080, y=150, bg_c=0x00cccc, text_c=0xffffff, font=lv.font_montserrat_48, parent=page0)
  canvas0 = m5ui.M5Canvas(x=638, y=193, w=277, h=85, color_format=lv.COLOR_FORMAT.ARGB8888, bg_c=0xc9c9c9, bg_opa=255, parent=page0)
  lab_Waight = m5ui.M5Label("4999.9ml", x=664, y=208, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_48, parent=page0)
  lab_beansWeight = m5ui.M5Label("0.0g", x=474, y=95, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_48, parent=page0)
  ScaleBar = m5ui.M5Bar(x=751, y=299, w=50, h=300, min_value=0, max_value=50, value=25, bg_c=0x450202, color=0x450202, parent=page0)
  label1 = m5ui.M5Label("500ml", x=593, y=294, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  label2 = m5ui.M5Label("0ml", x=629, y=590, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  label3 = m5ui.M5Label("250ml", x=594, y=437, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  lab_ScaleMB = m5ui.M5Label("50ml", x=809, y=294, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  lab_Scale0B = m5ui.M5Label("0ml", x=813, y=590, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_30, parent=page0)
  lab_beansWlb = m5ui.M5Label("BEANS Waight:", x=380, y=45, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_36, parent=page0)
  BTN_beans = m5ui.M5Button(text="BEANS", x=369, y=158, bg_c=0x00cccc, text_c=0xffffff, font=lv.font_montserrat_36, parent=page0)
  lab_Retiolb = m5ui.M5Label("RETIO:", x=730, y=45, text_c=0xff0000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_36, parent=page0)
  lab_Recio = m5ui.M5Label("1:1", x=800, y=95, text_c=0xff0000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_48, parent=page0)

  BTN_beans.add_event_cb(BTN_beans_event_handler, lv.EVENT.ALL, None)
  BTNreset.add_event_cb(BTNreset_event_handler, lv.EVENT.ALL, None)
  BTNstart.add_event_cb(BTNstart_event_handler, lv.EVENT.ALL, None)
  switchOpton.add_event_cb(switchOpton_event_handler, lv.EVENT.ALL, None)

  weight_0 = WeightUnit(port=(54, 53))
  weight_0.set_tare()
  page0.screen_load()
  initWeight = 0
  maxWeight = 0
  nowScale = 50
  beansWeight = 0
  TimeLabel.toggle_flag(lv.obj.FLAG.HIDDEN)
  scaleOn = False
  nowtime = 0
  barDripper.set_flag(lv.obj.FLAG.HIDDEN, True)
  Temp.set_flag(lv.obj.FLAG.HIDDEN, True)
  arc0.set_flag(lv.obj.FLAG.HIDDEN, True)
  befourTime = time.time()


def loop():
  global page0, lab_time0, TimeBG, switchOpton, BTNreset, lab_Option, TimeLabel, lab_Temp, slider0, switch0, arc0, lab_Driper, Temp, switch1, lab_time30, barDripper, slider30, slider60, slider90, slider120, slider150, slider180, slider210, slider240, slider270, slider300, lab_time150, lab_time210, lab_time270, lab_time90, lab_time60, lab_time120, lab_time180, lab_time240, lab_time300, BTNstart, canvas0, lab_Waight, lab_beansWeight, ScaleBar, label1, label2, label3, lab_ScaleMB, lab_Scale0B, lab_beansWlb, BTN_beans, lab_Retiolb, lab_Recio, weight_0, Weight, valSTR, beansWeight, initWeight, scaleOn, x, startTime, nowtime, nowWeight, TimeMM, TimeSS, maxWeight, nowScale, TimeStr, scaleSTR, befourTime
  M5.update()
  if scaleOn:
    nowtime = (time.time()) - startTime
    TimeMM = nowtime % 3600
    TimeSS = TimeMM % 60
    TimeMM = int((nowtime % 3600) / 60)
    TimeStr = ''
    if TimeMM < 10:
      TimeStr = (str(TimeStr) + str('0'))
    TimeStr = (str(TimeStr) + str(TimeMM))
    TimeStr = (str(TimeStr) + str(':'))
    if TimeSS < 10:
      TimeStr = (str(TimeStr) + str('0'))
    TimeStr = (str(TimeStr) + str(TimeSS))
    TimeLabel.set_text(str(TimeStr))
  nowWeight = getWeight()
  ScaleBar.set_value(round(nowWeight), True)
  if nowWeight > maxWeight:
    maxWeight = nowWeight
  if (ScaleBar.get_max_value()) < nowWeight:
    nowScale = ((int(nowWeight / 50)) + 1) * 50
    ScaleBar.set_range(0, nowScale)
    lab_ScaleMB.set_text(str((str((ScaleBar.get_max_value())) + str('ml'))))
  scaleSTR = (str((TEXTFORMAT(nowWeight))) + str('ml'))
  lab_Waight.set_x(844 - len(scaleSTR) * 20)
  lab_Waight.set_text(str(scaleSTR))
  if (float(beansWeight)) != 0:
    lab_Recio.set_text(str((str('1:') + str((TEXTFORMAT(round((float(nowWeight)) / (float(beansWeight)), 1)))))))
  else:
    lab_Recio.set_text(str('1:0.0'))
  if (time.time()) - befourTime > 0:
    befourTime = time.time()
    SlideScale()
    if scaleOn:
      print((str(((str(nowtime) + str(',')))) + str((TEXTFORMAT(getWeight())))))


if __name__ == '__main__':
  try:
    setup()
    while True:
      loop()
  except (Exception, KeyboardInterrupt) as e:
    try:
      m5ui.deinit()
      from utility import print_error_msg
      print_error_msg(e)
    except ImportError:
      print("please update to latest firmware")

Credits

Yoshihiro Sato
3 projects • 1 follower
PC Instructor

Comments