ported to CircuitPython
This commit is contained in:
parent
53e0163a70
commit
52e4bec411
4 changed files with 273 additions and 0 deletions
|
|
@ -0,0 +1,115 @@
|
|||
#include <FastLED.h>
|
||||
|
||||
#define LED_PIN 1 // which pin your pixels are connected to
|
||||
#define NUM_LEDS 78 // how many LEDs you have
|
||||
#define BRIGHTNESS 200 // 0-255, higher number is brighter.
|
||||
#define SATURATION 255 // 0-255, 0 is pure white, 255 is fully saturated color
|
||||
#define SPEED 10 // How fast the colors move. Higher numbers = faster motion
|
||||
#define STEPS 2 // How wide the bands of color are. 1 = more like a gradient, 10 = more like stripes
|
||||
#define BUTTON_PIN 2 // button is connected to pin 2 and GND
|
||||
|
||||
#define COLOR_ORDER GRB // Try mixing up the letters (RGB, GBR, BRG, etc) for a whole new world of color combinations
|
||||
|
||||
CRGB leds[NUM_LEDS];
|
||||
CRGBPalette16 currentPalette;
|
||||
CRGBPalette16 targetPalette( PartyColors_p );
|
||||
TBlendType currentBlending;
|
||||
int ledMode = 0;
|
||||
|
||||
|
||||
//FastLED comes with several palettes pre-programmed. I like purple a LOT, and so I added a custom purple palette.
|
||||
|
||||
const TProgmemPalette16 PurpleColors_p PROGMEM =
|
||||
{
|
||||
CRGB::Purple,
|
||||
CRGB::Purple,
|
||||
CRGB::MidnightBlue,
|
||||
CRGB::MidnightBlue,
|
||||
|
||||
CRGB::Purple,
|
||||
CRGB::Purple,
|
||||
CRGB::BlueViolet,
|
||||
CRGB::BlueViolet,
|
||||
|
||||
CRGB::DarkTurquoise,
|
||||
CRGB::DarkTurquoise,
|
||||
CRGB::DarkBlue,
|
||||
CRGB::DarkBlue,
|
||||
|
||||
CRGB::Purple,
|
||||
CRGB::Purple,
|
||||
CRGB::BlueViolet,
|
||||
CRGB::BlueViolet
|
||||
};
|
||||
|
||||
|
||||
unsigned long keyPrevMillis = 0;
|
||||
const unsigned long keySampleIntervalMs = 25;
|
||||
byte longKeyPressCountMax = 80; // 80 * 25 = 2000 ms
|
||||
byte longKeyPressCount = 0;
|
||||
|
||||
byte prevKeyState = HIGH; // button is active low
|
||||
|
||||
void setup() {
|
||||
delay( 2000 ); // power-up safety delay
|
||||
FastLED.addLeds<WS2812B, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
|
||||
FastLED.setBrightness( BRIGHTNESS );
|
||||
currentBlending =LINEARBLEND;
|
||||
pinMode(BUTTON_PIN, INPUT_PULLUP);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
byte currKeyState = digitalRead(BUTTON_PIN);
|
||||
|
||||
if ((prevKeyState == LOW) && (currKeyState == HIGH)) {
|
||||
shortKeyPress();
|
||||
}
|
||||
prevKeyState = currKeyState;
|
||||
|
||||
static uint8_t startIndex = 0;
|
||||
startIndex = startIndex + 1; /* motion speed */
|
||||
|
||||
switch (ledMode) {
|
||||
|
||||
case 0:
|
||||
currentPalette = HeatColors_p; //Red & Yellow, Fire Colors
|
||||
break;
|
||||
case 1:
|
||||
currentPalette = ForestColors_p; //Foresty greens and yellows
|
||||
break;
|
||||
case 2:
|
||||
currentPalette = OceanColors_p; //Oceans are pretty and filled with mermaids
|
||||
break;
|
||||
case 3:
|
||||
currentPalette = PurpleColors_p; //My custom palette from above
|
||||
break;
|
||||
case 4:
|
||||
currentPalette = RainbowColors_p; //All the colors!
|
||||
break;
|
||||
case 5:
|
||||
currentPalette = RainbowStripeColors_p; //Rainbow stripes
|
||||
break;
|
||||
case 6:
|
||||
currentPalette = PartyColors_p; //All the colors except the greens, which make people look a bit washed out
|
||||
break;
|
||||
}
|
||||
|
||||
FillLEDsFromPaletteColors( startIndex);
|
||||
FastLED.show();
|
||||
FastLED.delay(1000 / SPEED);
|
||||
}
|
||||
|
||||
void FillLEDsFromPaletteColors( uint8_t colorIndex) {
|
||||
for( int i = 0; i < NUM_LEDS; i++) {
|
||||
leds[i] = ColorFromPalette( currentPalette, colorIndex, BRIGHTNESS, currentBlending);
|
||||
colorIndex += STEPS;
|
||||
}
|
||||
}
|
||||
|
||||
void shortKeyPress() {
|
||||
ledMode++;
|
||||
if (ledMode > 6) {
|
||||
ledMode=0;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,154 @@
|
|||
import board
|
||||
import neopixel
|
||||
import time
|
||||
from digitalio import DigitalInOut, Direction, Pull
|
||||
import adafruit_fancyled.adafruit_fancyled as fancy
|
||||
|
||||
led_pin = board.D1 # which pin your pixels are connected to
|
||||
num_leds = 78 # how many LEDs you have
|
||||
brightness = 1.0 # 0-1, higher number is brighter
|
||||
saturation = 255 # 0-255, 0 is pure white, 255 is fully saturated color
|
||||
steps = 0.01 # how wide the bands of color are.
|
||||
offset = 0 # cummulative steps
|
||||
fadeup = True # start with fading up - increase steps until offset reaches 1
|
||||
index = 8 # midway color selection
|
||||
blend = True # color blending between palette indices
|
||||
|
||||
# initialize list with all pixels off
|
||||
palette = [ 0 ] * num_leds
|
||||
|
||||
# Declare a NeoPixel object on led_pin with num_leds as pixels
|
||||
# No auto-write.
|
||||
# Set brightness to max.
|
||||
# We will be using FancyLED's brightness control.
|
||||
strip = neopixel.NeoPixel(led_pin, num_leds, brightness=1, auto_write=False)
|
||||
|
||||
# button setup
|
||||
button = DigitalInOut(board.D2)
|
||||
button.direction = Direction.INPUT
|
||||
button.pull = Pull.UP
|
||||
prevkeystate = False
|
||||
ledmode = 0 # button press counter, switch color palettes
|
||||
|
||||
# FancyLED allows for assigning a color palette using these formats:
|
||||
# * The first (5) palettes here are mixing between 2-elements
|
||||
# * The last (3) palettes use a format identical to the FastLED Arduino Library
|
||||
# see FastLED - colorpalettes.cpp
|
||||
forest = [ fancy.CRGB( 0, 255, 0 ), # green
|
||||
fancy.CRGB( 255, 255, 0) ] # yellow
|
||||
|
||||
ocean = [ fancy.CRGB( 0, 0, 255 ), # blue
|
||||
fancy.CRGB( 0, 255, 0 ) ] # green
|
||||
|
||||
purple = [ fancy.CRGB( 160, 32, 240 ), # purple
|
||||
fancy.CRGB( 238, 130, 238 ) ] # violet
|
||||
|
||||
all_colors = [ fancy.CRGB( 0, 0, 0 ), # black
|
||||
fancy.CRGB( 255, 255, 255 ) ] # white
|
||||
|
||||
washed_out = [ fancy.CRGB( 0, 0, 0 ), # black
|
||||
fancy.CRGB( 255, 0, 255 ) ] # purple
|
||||
|
||||
rainbow = [ 0xFF0000, 0xD52A00, 0xAB5500, 0xAB7F00,
|
||||
0xABAB00, 0x56D500, 0x00FF00, 0x00D52A,
|
||||
0x00AB55, 0x0056AA, 0x0000FF, 0x2A00D5,
|
||||
0x5500AB, 0x7F0081, 0xAB0055, 0xD5002B ]
|
||||
|
||||
rainbow_stripe= [ 0xFF0000, 0x000000, 0xAB5500, 0x000000,
|
||||
0xABAB00, 0x000000, 0x00FF00, 0x000000,
|
||||
0x00AB55, 0x000000, 0x0000FF, 0x000000,
|
||||
0x5500AB, 0x000000, 0xAB0055, 0x000000 ]
|
||||
|
||||
heat_colors = [ 0x330000, 0x660000, 0x990000, 0xCC0000, 0xFF0000,
|
||||
0xFF3300, 0xFF6600, 0xFF9900, 0xFFCC00, 0xFFFF00,
|
||||
0xFFFF33, 0xFFFF66, 0xFFFF99, 0xFFFFCC ]
|
||||
|
||||
|
||||
def wheel(pos):
|
||||
|
||||
# Input a value 0 to 255 to get a color value.
|
||||
# The colours are a transition r - g - b - back to r.
|
||||
if (pos < 0) or (pos > 255):
|
||||
return (0, 0, 0)
|
||||
if (pos < 85):
|
||||
return (int(pos * 3), int(255 - (pos*3)), 0)
|
||||
elif (pos < 170):
|
||||
pos -= 85
|
||||
return (int(255 - pos*3), 0, int(pos*3))
|
||||
else:
|
||||
pos -= 170
|
||||
return (0, int(pos*3), int(255 - pos*3))
|
||||
|
||||
def remapRange(value, leftMin, leftMax, rightMin, rightMax):
|
||||
|
||||
# this remaps a value from original (left) range to new (right) range
|
||||
# Figure out how 'wide' each range is
|
||||
leftSpan = leftMax - leftMin
|
||||
rightSpan = rightMax - rightMin
|
||||
|
||||
# Convert the 0-1 range into a value in the right range.
|
||||
return int(rightMin + (valueScaled * rightSpan))
|
||||
|
||||
def shortkeypress(color_palette):
|
||||
|
||||
color_palette += 1
|
||||
|
||||
if ( color_palette > 6):
|
||||
color_palette = 1
|
||||
|
||||
return ( color_palette )
|
||||
|
||||
while True:
|
||||
|
||||
# check for button press
|
||||
currkeystate = button.value
|
||||
|
||||
# button press, move to next pattern
|
||||
if ( ( prevkeystate == False ) and ( currkeystate == True ) ):
|
||||
ledmode = shortkeypress(ledmode)
|
||||
|
||||
# save button press state
|
||||
prevkeystate = currkeystate
|
||||
|
||||
# Fire Colors [ HEAT ]
|
||||
if ( ledmode == 1 ):
|
||||
palette = heat_colors
|
||||
|
||||
# Forest
|
||||
elif ( ledmode == 2 ):
|
||||
palette = forest
|
||||
|
||||
# Ocean
|
||||
elif ( ledmode == 3 ):
|
||||
palette = ocean
|
||||
|
||||
# Purple Lovers
|
||||
elif ( ledmode == 4 ):
|
||||
palette = purple
|
||||
|
||||
# All the colors!
|
||||
elif ( ledmode == 5 ):
|
||||
palette = rainbow
|
||||
|
||||
# Rainbow stripes
|
||||
elif ( ledmode == 6 ):
|
||||
palette = rainbow_stripe
|
||||
|
||||
# All the colors except the greens, washed out
|
||||
elif ( ledmode == 7 ):
|
||||
palette = washed_out
|
||||
|
||||
for i in range(num_leds):
|
||||
color = fancy.palette_lookup(palette, offset + i / num_leds)
|
||||
color = fancy.gamma_adjust(color, brightness=brightness)
|
||||
strip[i] = color.pack()
|
||||
strip.show()
|
||||
|
||||
if ( fadeup ):
|
||||
offset += steps
|
||||
if ( offset >= 1 ):
|
||||
fadeup = False
|
||||
else:
|
||||
offset -= steps
|
||||
if ( offset <= 0 ):
|
||||
fadeup = True
|
||||
4
Animated_NeoPixel_Glow_Fur_Scarf/README.md
Normal file
4
Animated_NeoPixel_Glow_Fur_Scarf/README.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
# Animated_NeoPixel_Glow_Fur_Scarf
|
||||
|
||||
Code to accompany this tutorial:
|
||||
https://learn.adafruit.com/animated-neopixel-gemma-glow-fur-scarf
|
||||
BIN
Breath_Tester/Breath_Tester.fzz
Normal file
BIN
Breath_Tester/Breath_Tester.fzz
Normal file
Binary file not shown.
Loading…
Reference in a new issue