Crickit makes it really easy to add NeoPixels (WS2812/WS2811/SK6812 chipsets) to your project. The Crickit has a 3-terminal block connector with Ground, Signal and 5V power. The signal line has a level shifter on it so it will be 5V logic level, for nice clean signals.
This output is slightly different depending on what kind of Crickit you have.
If you have a Circuit Playground Crickit then the NeoPixels are driven by the Circuit Playground A1 pad by default.
Use the Adafruit_NeoPixel library to control NeoPixels connected to Crickit through Circuit Playground Express pin A1.
However, if you want, you can cut the jumper underneath the Crickit and solder closed the ss pad so that the seesaw chip controls the NeoPixels (for advanced hackers only). See below for use.
If you have a Feather Crickit then the NeoPixels are driven by the seesaw chip on the Crickit, and you must send seesaw commands to set colors. But that means no extra pins are needed from your Feather. See below for use.
If you have a micro:bit Crickit, NeoPixels are driven by micro:bit Pin P16.
Use the Adafruit_NeoPixel library to control NeoPixels connected to Crickit through micro:bit P16.
However, if you want, you can cut the jumper underneath the Crickit and solder closed the ss pad so that the seesaw chip controls the NeoPixels (for advanced hackers only). See below.
Advanced Use - Using Seesaw to Control NeoPixels
Your microcontroller can communicate to the Crickit seesaw chip to have seesaw control the NeoPixels. Adafruit considers this advanced use at the Arduino level and recommends MakeCode or CircuitPython for Crickit NeoPixel. With this in mind, read on.
If you choose to have the NeoPixel driven from the seesaw, note it is on seesaw pin #20. To use seesaw pin 20 on Circuit Playground Express and micro:bit Crickit, you must cut a jumper on the Crickit circuit board on the back. You can always mend this with solder, but it's NOT something you change back and forth.
For FeatherWing for Crickit, the NeoPixels are already connected to seesaw pin 20, you don't need to do the surgery below.
Turn the Crickit over and locate the jumper block on the bottom as circled in yellow in the first image.
You will need to take a knife and cut the tiny gold trace pointed by the red arrow to sever the current NeoPixel to microcontroller connection.
Using a soldering iron, put a mice bright solder connection between the pads as marked by the blue arrow.
The Seesaw Pin 20 is now connected to the NeoPixel connections on Crickit.
The Adafruit_seesaw library has seesaw NeoPixel support. You can get the latest version of this library through the Arduino board manager as described in this guide on the Arduino page.
Your Arduino sketch should include seesaw_neopixel.h which provides the NeoPixel functions for seesaw.
The following example sets up a strand of NeoPixels and runs through some animations.
#include <seesaw_neopixel.h> #define PIN 10 // Parameter 1 = number of pixels in strip // Parameter 2 = Arduino pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: // NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) // NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) // NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) // NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) // NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products) seesaw_NeoPixel strip = seesaw_NeoPixel(12, PIN, NEO_GRB + NEO_KHZ800); // IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across // pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input // and minimize distance between Arduino and first pixel. Avoid connecting // on a live circuit...if you must, connect GND first. void setup() { Serial.begin(115200); while (!Serial) delay(10); // wait until serial port is opened if(!strip.begin()){ Serial.println("seesaw not found!"); while(1) delay(10); } Serial.println(F("seesaw started OK!")); strip.show(); // Initialize all pixels to 'off' } void loop() { // Some example procedures showing how to display to the pixels: colorWipe(strip.Color(255, 0, 0), 50); // Red colorWipe(strip.Color(0, 255, 0), 50); // Green colorWipe(strip.Color(0, 0, 255), 50); // Blue //colorWipe(strip.Color(0, 0, 0, 255), 50); // White RGBW // Send a theater pixel chase in... theaterChase(strip.Color(127, 127, 127), 50); // White theaterChase(strip.Color(127, 0, 0), 50); // Red theaterChase(strip.Color(0, 0, 127), 50); // Blue rainbow(20); rainbowCycle(20); theaterChaseRainbow(50); } // Fill the dots one after the other with a color void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, c); strip.show(); delay(wait); } } void rainbow(uint8_t wait) { uint16_t i, j; for(j=0; j<256; j++) { for(i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, Wheel((i+j) & 255)); } strip.show(); delay(wait); } } // Slightly different, this makes the rainbow equally distributed throughout void rainbowCycle(uint8_t wait) { uint16_t i, j; for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel for(i=0; i< strip.numPixels(); i++) { strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255)); } strip.show(); delay(wait); } } //Theatre-style crawling lights. void theaterChase(uint32_t c, uint8_t wait) { for (int j=0; j<10; j++) { //do 10 cycles of chasing for (int q=0; q < 3; q++) { for (uint16_t i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, c); //turn every third pixel on } strip.show(); delay(wait); for (uint16_t i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); //turn every third pixel off } } } } //Theatre-style crawling lights with rainbow effect void theaterChaseRainbow(uint8_t wait) { for (int j=0; j < 256; j++) { // cycle all 256 colors in the wheel for (int q=0; q < 3; q++) { for (uint16_t i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, Wheel( (i+j) % 255)); //turn every third pixel on } strip.show(); delay(wait); for (uint16_t i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); //turn every third pixel off } } } } // Input a value 0 to 255 to get a color value. // The colours are a transition r - g - b - back to r. uint32_t Wheel(byte WheelPos) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); } if(WheelPos < 170) { WheelPos -= 85; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); }
Text editor powered by tinymce.