Fixed minor formatting issues

pull/807/head
Irvin Makosa 2023-08-01 00:34:39 +01:00
rodzic b8cdff8f4f
commit 8bb5e17e65
1 zmienionych plików z 33 dodań i 32 usunięć

Wyświetl plik

@ -1,13 +1,12 @@
import time import time
from galactic import GalacticUnicorn from galactic import GalacticUnicorn
from picographics import PicoGraphics, DISPLAY_GALACTIC_UNICORN as DISPLAY from picographics import PicoGraphics, DISPLAY_GALACTIC_UNICORN as DISPLAY
import math
''' """
Auto brightness feature for the galactic unicorn Auto brightness feature for the galactic unicorn
Uses the onboard light sensor to detect the light Uses the onboard light sensor to detect the light
The brightness percentage is displayed with brightness auto adjusted The brightness percentage is displayed with brightness auto adjusted
''' """
# set up unicorn and drawing variables # set up unicorn and drawing variables
gu = GalacticUnicorn() gu = GalacticUnicorn()
graphics = PicoGraphics(DISPLAY) graphics = PicoGraphics(DISPLAY)
@ -27,71 +26,75 @@ TEXT_SLEEP = 500
# the onboard light sensor has a wide range from 0 t0 4095 # the onboard light sensor has a wide range from 0 t0 4095
# It is therefore needed to set a lower max and a higher minimum # It is therefore needed to set a lower max and a higher minimum
MIN_LS_VALUE = 10 MIN_LS_VALUE = 10
MAX_LS_VALUE = 295 # 4095 to use the full range MAX_LS_VALUE = 295 # 4095 to use the full range
MIN_RANGE = 0.1 MIN_RANGE = 0.1
MAX_RANGE = 1 MAX_RANGE = 1
# perform linear interpolation to map a range of values to discrete # perform linear interpolation to map a range of values to discrete
def map_range(x, min_input = MIN_LS_VALUE, def map_range(
max_input = MAX_LS_VALUE, x,
min_output = MIN_RANGE, min_input=MIN_LS_VALUE,
max_output = MAX_RANGE): max_input=MAX_LS_VALUE,
return (x - min_input) * (max_output - min_output) / (max_input - min_input) + min_output min_output=MIN_RANGE,
max_output=MAX_RANGE,
):
return (x - min_input) * (max_output - min_output) / (
max_input - min_input
) + min_output
# gets the light sensor value from onboard sensor and interpolates it # gets the light sensor value from onboard sensor and interpolates it
# clamps the brightness values # clamps the brightness values
def calculate_brightness(current_lsv): def calculate_brightness(current_lsv):
brightness_value = map_range(current_lsv) brightness_val = map_range(current_lsv)
if brightness_value > 1: if brightness_val > 1:
brightness_value = 1 brightness_val = 1
elif brightness_value < 0.1: elif brightness_val < 0.1:
brightness_value = 0.1 brightness_val = 0.1
return brightness_value return brightness_val
# sets up a handy function we can call to clear the screen # sets up a handy function we can call to clear the screen
def clear(): def clear():
graphics.set_pen(BLACK) graphics.set_pen(BLACK)
graphics.clear() graphics.clear()
mode = "auto" mode = "auto"
last = time.ticks_ms() last = time.ticks_ms()
while True: while True:
current = time.ticks_ms() current = time.ticks_ms()
# get light sensor value from the sensor # get light sensor value from the sensor
ls_value = gu.light() ls_value = gu.light()
brightness_value = calculate_brightness(ls_value) brightness_value = calculate_brightness(ls_value)
gu.set_brightness(brightness_value) gu.set_brightness(brightness_value)
# calculate brightness percentage # calculate brightness percentage
bp = (brightness_value / MAX_RANGE) * 100 bp = (brightness_value / MAX_RANGE) * 100
# deactivate auto brightness by pressing A # deactivate auto brightness by pressing A
if gu.is_pressed(GalacticUnicorn.SWITCH_A): if gu.is_pressed(GalacticUnicorn.SWITCH_A):
print("Auto brightness off") print("Auto brightness off")
mode = "off" mode = "off"
# reactivate auto brightness by pressing A # reactivate auto brightness by pressing A
if gu.is_pressed(GalacticUnicorn.SWITCH_B): if gu.is_pressed(GalacticUnicorn.SWITCH_B):
print("Auto brightness on") print("Auto brightness on")
mode = "auto" mode = "auto"
# set brightness to default value if off # set brightness to default value if off
if mode == "off": if mode == "off":
gu.set_brightness(0.5) gu.set_brightness(0.5)
# set text update rate after a certain time to reduce flickering # set text update rate after a certain time to reduce flickering
if current - last >= TEXT_SLEEP: if current - last >= TEXT_SLEEP:
clear() clear()
# calculate colour from the brightness value # calculate colour from the brightness value
hue = max(0, HUE_START + ((bp - 0) * (HUE_END - HUE_START) / (100 - 0))) hue = max(0, HUE_START + ((bp - 0) * (HUE_END - HUE_START) / (100 - 0)))
# create pens with this colour (and with the high / low colours) # create pens with this colour (and with the high / low colours)
CURRENT_COLOUR = graphics.create_pen_hsv(hue / 360, 1.0, 0.8) CURRENT_COLOUR = graphics.create_pen_hsv(hue / 360, 1.0, 0.8)
HIGH_COLOUR = graphics.create_pen_hsv(HUE_END / 360, 1.0, 0.8) HIGH_COLOUR = graphics.create_pen_hsv(HUE_END / 360, 1.0, 0.8)
@ -100,10 +103,10 @@ while True:
# draw the text # draw the text
graphics.set_pen(CURRENT_COLOUR) graphics.set_pen(CURRENT_COLOUR)
graphics.text("BRT: ", 0, 1, scale=1) graphics.text("BRT: ", 0, 1, scale=1)
# measure the rest of the text before drawing so that we can right align it # measure the rest of the text before drawing to right align it
text_width = graphics.measure_text(f"{bp:.0f}", scale=1) text_width = graphics.measure_text(f"{bp:.0f}", scale=1)
graphics.text(f"{bp:.0f}%", WIDTH - text_width, 1, scale=1) graphics.text(f"{bp:.0f}%", WIDTH - text_width, 1, scale=1)
# draw a bar for the background # draw a bar for the background
graphics.set_pen(GREY) graphics.set_pen(GREY)
graphics.rectangle(0, 9, WIDTH, 10) graphics.rectangle(0, 9, WIDTH, 10)
@ -116,5 +119,3 @@ while True:
# time to update the display # time to update the display
gu.update(graphics) gu.update(graphics)
# time.sleep(1) # time.sleep(1)