Skip to content

Create an acceleration to LEDs example #65

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 8, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions examples/circuitplayground_acceleration_mapping_neopixels.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
"""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 earth’s 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 0–1
return round(normalized_accel * 255) # Convert to 0–255


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)