diff --git a/docs/examples.rst b/docs/examples.rst index 1f970cd..6adece9 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -66,3 +66,14 @@ Example showing both a Vertical and an Horizontal ProgressBar .. literalinclude:: ../examples/progressbar_combined.py :caption: examples/progressbar_combined.py :linenos: + + +Accelerometer Example +--------------------- + +With this example you would be able to use the progress bar to display accelerometer data +in the X and Y directions + +.. literalinclude:: ../examples/progressbar_accelerometer.py + :caption: examples/progressbar_accelerometer.py + :linenos: diff --git a/examples/progressbar_accelerometer.py b/examples/progressbar_accelerometer.py new file mode 100644 index 0000000..b47e3c8 --- /dev/null +++ b/examples/progressbar_accelerometer.py @@ -0,0 +1,225 @@ +# SPDX-FileCopyrightText: 2021 Jose David M. +# SPDX-License-Identifier: MIT +""" +With this example you would be able to use the progress bar to display accelerometer data +in the X and Y directions +""" +import time +import displayio +import board +from adafruit_progressbar.horizontalprogressbar import ( + HorizontalProgressBar, + HorizontalFillDirection, +) +from adafruit_progressbar.verticalprogressbar import ( + VerticalProgressBar, + VerticalFillDirection, +) + +# This data is used to show library capability. You could use an actual accelerometer +# This data was extracted from an Adafruit MSA301 Triple Axis Accelerometer +fake__accel_data = [ + (-0.071821, 1.450790, 9.533077), + (-0.105338, 1.939175, 9.111725), + (-0.306437, 2.906367, 9.178761), + (-0.062245, 3.504878, 8.776562), + (-0.143643, 4.792873, 8.091862), + (-0.172371, 5.520662, 7.838097), + (0.014364, 6.176630, 7.426321), + (-0.205888, 7.526871, 6.200571), + (-0.090974, 7.905128, 5.491934), + (-0.445292, 8.216354, 5.118464), + (-0.110126, 8.872322, 4.017202), + (-0.344742, 9.542652, 1.498671), + (-0.076609, 9.580959, -0.033517), + (-0.158007, 9.518715, -1.273631), + (0.282497, 9.446892, -2.877639), + (-0.004788, 9.063847, -3.409117), + (-0.153219, 8.599400, -4.630077), + (-0.071821, 8.020042, -6.382517), + (0.655968, 6.722471, -6.937935), + (0.464444, 5.740913, -7.771063), + (1.034226, 4.189575, -8.905838), + (1.369392, 1.675830, -8.340843), + (2.149850, -1.426849, -9.178761), + (2.384466, -3.662886, -8.834019), + (2.417983, -5.223801, -7.957798), + (2.336586, -7.900341, -5.482357), + (2.106757, -9.231426, -4.194363), + (1.948751, -3.945382, -9.288883), + (0.588934, 0.062245, -9.643204), + (0.430928, 2.250400, -9.360706), + (-0.402199, 7.249161, -6.176630), + (-0.871432, 8.197201, -5.003550), + (0.373471, 8.829227, -3.696402), + (0.584146, 9.662357, -1.287995), + (0.114914, 9.940063, 0.536266), + (-0.201100, 9.207489, 2.848910), + (-0.181947, 8.589825, 5.314775), + (-0.517113, 5.573332, 7.598692), + (-0.497961, 3.160136, 9.092575), + (-0.114914, -1.541763, 9.940063), + (-0.555418, -5.099310, 7.727970), + (-0.387835, -7.091154, 7.095942), + (0.162795, -8.652069, 4.768932), + (0.531477, -8.934566, 0.751729), + (0.775670, -9.542652, -4.141693), + (1.809896, -7.177340, -7.282679), + (0.957617, -2.868063, -9.308037), + (1.450790, -0.866643, -9.571381), + (1.039014, -0.660756, -9.758118), + (0.914524, -4.907787, -8.379150), + (1.302359, -8.120594, -5.870192), + (1.043803, -9.916122, 2.365314), + (1.086895, -8.412666, 5.223801), + (2.034936, -5.942015, 7.488565), + (2.010996, -2.767513, 9.140453), + (0.397411, -2.322221, 9.130878), + (-2.025360, -2.398830, 9.116512), + (-2.824970, -2.264764, 8.896263), + (-4.395462, -2.001419, 8.259445), + (-5.640364, -1.220962, 7.569963), + (-7.000181, -0.746941, 6.679379), + (-8.077499, -0.004788, 5.338715), + (-9.001598, 0.421352, 2.585566), + (-9.408588, 1.106048, 1.053379), + (-9.097363, 2.283916, -1.589644), + (-8.522793, 2.714845, -3.021282), + (-7.991314, 3.083527, -4.505589), + (-6.416035, 3.720343, -6.732048), + (-6.186207, 3.562336, -5.788795), + (-3.289414, 3.428269, -8.254658), + (-1.110836, 3.787375, -8.944141), + (1.082107, 3.270263, -9.059055), + (1.565704, 3.820892, -8.446182), + (2.212095, 3.763435, -8.221142), + (3.030858, 4.175211, -8.029617), + (-2.365314, 2.633447, -8.221142), + (-5.372232, 2.188155, -7.445473), + (-8.465336, 2.116334, -4.577410), + (-9.432529, 1.388545, 0.541054), + (-6.957088, 1.623161, 6.085657), + (-4.735416, 0.751729, 8.992023), + (-1.800320, 2.063664, 9.762905), + (-0.153219, -1.795532, 9.657566), + (5.764854, -3.801740, 6.775141), + (9.470833, -2.240824, 2.777089), + (9.925701, -1.000710, -1.915234), + (8.685585, 0.277709, -4.347582), + (9.676720, -0.459656, -0.521901), + (9.719814, -0.689484, 1.584856), + (8.541943, -1.503459, 4.160847), + (7.608267, -1.824261, 5.865404), + (5.817524, -1.446002, 6.770353), + (3.887925, -1.991844, 8.671223), + (1.805108, -2.039724, 9.303249), + (0.593723, -1.690194, 9.518715), + (0.852279, -2.087605, 9.427738), + (1.206597, -1.857777, 9.226639), + (0.392623, -2.255188, 9.193123), + (-2.475440, -2.154638, 9.173969), + (-3.677250, -8.288174, 3.198441), + (-0.981558, -2.944673, 8.977661), + (1.517823, 3.409117, 8.977661), + (2.796242, 5.989895, 5.807947), + (4.151270, -2.552050, 9.418163), + (4.242243, -9.844303, 1.694982), + (5.946802, -3.543183, 6.890055), + (7.028910, -4.462496, 4.199150), + (-1.694982, -6.655439, 6.430399), + (0.703849, -3.112255, 8.685585), + (1.340664, 4.342793, 8.053558), + (1.627949, 9.920914, -0.608087), + (6.985817, 0.517113, 7.517294), + (5.434477, -5.372232, 5.994682), + (4.165634, -6.224510, 8.082287), + (0.847491, -4.677959, 9.509136), + (3.476150, -4.812025, 7.421532), +] +display = board.DISPLAY +main_group = displayio.Group(max_size=10) +display.show(main_group) + +color_bitmap = displayio.Bitmap(display.width, display.height, 1) +color_palette = displayio.Palette(1) +color_palette[0] = 0x990099 + +background = displayio.TileGrid(color_bitmap, pixel_shader=color_palette, x=0, y=0) +main_group.append(background) + +# Accelerometer Properties. Normally accelerometer well calibrated +# Will give a maximum output of 10 mts / s**2 +VALUES_X = (-10, 10) +VALUES_Y = (-10, 10) + +# Horizontal Bar Properties +HORIZONTAL_BAR_X_ORIGIN = 10 +HORIZONTAL_BAR_Y_ORIGIN = 30 +HORIZONTAL_BAR_WIDTH = display.width // 4 +HORIZONTAL_BAR_HEIGHT = 30 + +# Vertical Bar Properties +VERTICAL_BAR_HEIGHT = display.height // 4 +VERTICAL_BAR_WIDTH = 30 + +# We create our bar displays +left_horizontal_bar = HorizontalProgressBar( + (HORIZONTAL_BAR_X_ORIGIN, HORIZONTAL_BAR_Y_ORIGIN), + (HORIZONTAL_BAR_WIDTH, HORIZONTAL_BAR_HEIGHT), + min_value=0, + max_value=-VALUES_X[0], + direction=HorizontalFillDirection.RIGHT_TO_LEFT, +) +main_group.append(left_horizontal_bar) + +right_horizontal_bar = HorizontalProgressBar( + (HORIZONTAL_BAR_X_ORIGIN + HORIZONTAL_BAR_WIDTH, HORIZONTAL_BAR_Y_ORIGIN), + (HORIZONTAL_BAR_WIDTH, HORIZONTAL_BAR_HEIGHT), + min_value=0, + max_value=VALUES_X[1], + direction=HorizontalFillDirection.LEFT_TO_RIGHT, +) +main_group.append(right_horizontal_bar) + + +top_vertical_bar = VerticalProgressBar( + (HORIZONTAL_BAR_X_ORIGIN + 2 * HORIZONTAL_BAR_WIDTH + 20, HORIZONTAL_BAR_Y_ORIGIN), + (VERTICAL_BAR_WIDTH, VERTICAL_BAR_HEIGHT), + min_value=0, + max_value=VALUES_Y[1], + direction=VerticalFillDirection.BOTTOM_TO_TOP, +) +main_group.append(top_vertical_bar) + +bottom_vertical_bar = VerticalProgressBar( + ( + HORIZONTAL_BAR_X_ORIGIN + 2 * HORIZONTAL_BAR_WIDTH + 20, + HORIZONTAL_BAR_Y_ORIGIN + VERTICAL_BAR_HEIGHT, + ), + (VERTICAL_BAR_WIDTH, VERTICAL_BAR_HEIGHT), + min_value=0, + max_value=-VALUES_Y[0], + direction=VerticalFillDirection.TOP_TO_BOTTOM, +) +main_group.append(bottom_vertical_bar) + +delay = 0.5 + +while True: + for val in fake__accel_data: + if val[0] >= 0: + left_horizontal_bar.value = 0 + right_horizontal_bar.value = val[0] + if val[0] < 0: + left_horizontal_bar.value = -val[0] + right_horizontal_bar.value = 0 + + if val[1] >= 0: + top_vertical_bar.value = val[1] + bottom_vertical_bar.value = 0 + if val[1] < 0: + bottom_vertical_bar.value = -val[1] + top_vertical_bar.value = 0 + + display.refresh() + time.sleep(delay)