1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- """
- Movalite by The Dod:
- Adafruit CircuitPlayground Bluefruit motion-sensitiuve "bling"
- The RGB levels of neopixels around the circuit are affected
- by X/Y/Z acceleration
-
- Controls:
- slider switch: normal/standby mode
- button a: increase brightness
- button b: decrease brightness
- """
- import math
- import time
- from adafruit_circuitplayground import cp
-
- NUM_PIXELS = 10
- # Like a clock, with connectors at 12 (USB) and 6 (power)
- LED_ANGLES = [
- i*math.pi/6.0
- for i in [11, 10, 9, 8, 7, 5, 4, 3, 2, 1]]
-
- minx = miny = minz = -5.0
- maxx = maxy = maxz = 5.0
-
- cp.pixels.brightness = 0.1
-
- is_standby = cp.switch
- last_click = 0
- DEBOUNCE = 0.25
-
- def angles2level(led, val):
- led_angle = LED_ANGLES[led]
- val_angle = val * 2.0 * math.pi
- angle = led_angle - val_angle
- while angle > 2 * math.pi:
- angle -= 2*math.pi
- # the pow() makes sin() values sharper
- return int(255*pow(math.sin(angle/2), 4))
-
- while True:
- if time.monotonic() > last_click+DEBOUNCE:
- if is_standby != cp.switch:
- is_standby = cp.switch
- last_click = time.monotonic()
- if is_standby:
- for i in range(NUM_PIXELS):
- cp.pixels[i] = (0, 0, 0)
- if cp.button_b:
- last_click = time.monotonic()
- cp.pixels.brightness = max(0.05, cp.pixels.brightness*0.9)
- elif cp.button_a:
- last_click = time.monotonic()
- cp.pixels.brightness = min(0.95, 1.0-(1.0-cp.pixels.brightness)*0.9)
- if not is_standby:
- x, y, z = cp.acceleration
- if x < minx:
- minx = x
- if y < miny:
- miny = y
- if z < minz:
- minz = z
- if x > maxx:
- maxx = x
- if y > maxy:
- maxy = y
- if z > maxz:
- maxz = z
- vals = (
- (x-minx)/(maxx-minx),
- (y-miny)/(maxy-miny),
- (z-minz)/(maxz-minz))
- for i in range(NUM_PIXELS):
- cp.pixels[i] = (
- angles2level(i, vals[0]),
- angles2level(i, vals[1]),
- angles2level(i, vals[2]))
- time.sleep(0.01)
|