Adafruit_CircuitPython_Circ.../examples/circuitplayground_acceleration_mapping_neopixels.py
2019-08-08 13:22:59 -07:00

48 lines
1.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Maps acceleration (tilt) to Neopixel colors.
x, y, and z acceleration components map to red, green and blue,
respectively.
When the CPX is level, the lights are blue because there is no acceleration
on x or y, but on z, gravity pulls at 9.81 meters per second per second (m/s²).
When banking, the vertical (z) axis is no longer directly aligned with gravity,
so the blue decreases, and red increases because gravity is now pulling more
along the x axis. Similarly, when changing the pitch from level, we see blue change
to green.
This video walks you through the code: https://youtu.be/eNpPLbYx-iA
"""
import time
from adafruit_circuitplayground.express import cpx
cpx.pixels.brightness = 0.2 # Adjust overall brightness as desired, between 0 and 1
def color_amount(accel_component):
"""Convert acceleration component (x, y, or z) to color amount (r, g, or b)"""
standard_gravity = 9.81 # Acceleration (m/s²) due to gravity at the earths surface
accel_magnitude = abs(accel_component) # Ignore the direction
constrained_accel = min(accel_magnitude, standard_gravity) # Constrain values
normalized_accel = constrained_accel / standard_gravity # Convert to 01
return round(normalized_accel * 255) # Convert to 0255
def format_acceleration():
return ', '.join(('{:>6.2f}'.format(axis_value) for axis_value in acceleration))
def format_rgb():
return ', '.join(('{:>3d}'.format(rgb_amount) for rgb_amount in rgb_amounts))
def log_values():
print('({}) ==> ({})'.format(format_acceleration(), format_rgb()))
while True:
acceleration = cpx.acceleration
rgb_amounts = [color_amount(axis_value) for axis_value in acceleration]
cpx.pixels.fill(rgb_amounts)
log_values()
time.sleep(0.1)