Stap 3: codering
Nadat ik aangesloten LEDs op de FLORA voor de eerste keer dat ik wilde om te testen deze hele strip ook ervoor zorgen ik had een volledige waaier van kleur en alle de LEDs werkten goed. Ik liep te doen met de volgende code die werd opgenomen als een voorbeeld schets wanneer u de LED-bibliotheek gedownload van Adafruit.
#include "SPI.h"<br>#include "Adafruit_WS2801.h" /***************************************************************************** Example sketch for driving Adafruit WS2801 pixels! Designed specifically to work with the Adafruit RGB Pixels! 12mm Bullet shape ----> <a href="https://www.adafruit.com/products/322"> <a href="https://www.adafruit.com/products/322"> <a href="https://www.adafruit.com/products/322"> https://www.adafruit.com/products/322 </a> </a> </a> 12mm Flat shape ----> <a href="https://www.adafruit.com/products/738"> <a href="https://www.adafruit.com/products/322"> <a href="https://www.adafruit.com/products/322"> https://www.adafruit.com/products/322 </a> </a> </a> 36mm Square shape ----> <a href="https://www.adafruit.com/products/683"> <a href="https://www.adafruit.com/products/322"> <a href="https://www.adafruit.com/products/322"> https://www.adafruit.com/products/322 </a> </a> </a> These pixels use SPI to transmit the color data, and have built in high speed PWM drivers for 24 bit color per pixel 2 pins are required to interface Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, all text above must be included in any redistribution *****************************************************************************/ // Choose which 2 pins you will use for output. // Can be any valid output pins. // The colors of the wires may be totally different so // BE SURE TO CHECK YOUR PIXELS TO SEE WHICH WIRES TO USE! uint8_t dataPin = 2; // Yellow wire on Adafruit Pixels uint8_t clockPin = 3; // Green wire on Adafruit Pixels // Don't forget to connect the ground wire to Arduino ground, // and the +5V wire to a +5V supply // Set the first variable to the NUMBER of pixels. 25 = 25 pixels in a row Adafruit_WS2801 strip = Adafruit_WS2801(25, dataPin, clockPin); // Optional: leave off pin numbers to use hardware SPI // (pinout is then specific to each board and can't be changed) //Adafruit_WS2801 strip = Adafruit_WS2801(25); // For 36mm LED pixels: these pixels internally represent color in a // different format. Either of the above constructors can accept an // optional extra parameter: WS2801_RGB is 'conventional' RGB order // WS2801_GRB is the GRB order required by the 36mm pixels. Other // than this parameter, your code does not need to do anything different; // the library will handle the format change. Examples: //Adafruit_WS2801 strip = Adafruit_WS2801(25, dataPin, clockPin, WS2801_GRB); //Adafruit_WS2801 strip = Adafruit_WS2801(25, WS2801_GRB); void setup() { strip.begin(); // Update LED contents, to start they are all 'off' strip.show(); } void loop() { // Some example procedures showing how to display to the pixels colorWipe(Color(255, 0, 0), 50); colorWipe(Color(0, 255, 0), 50); colorWipe(Color(0, 0, 255), 50); rainbow(20); rainbowCycle(20); } void rainbow(uint8_t wait) { int i, j; for (j=0; j < 256; j++) { // 3 cycles of all 256 colors in the wheel for (i=0; i < strip.numPixels(); i++) { strip.setPixelColor(i, Wheel( (i + j) % 255)); } strip.show(); // write all the pixels out delay(wait); } } // Slightly different, this one makes the rainbow wheel equally distributed // along the chain void rainbowCycle(uint8_t wait) { int i, j; for (j=0; j < 256 * 5; j++) { // 5 cycles of all 25 colors in the wheel for (i=0; i < strip.numPixels(); i++) { // tricky math! we use each pixel as a fraction of the full 96-color wheel // (thats the i / strip.numPixels() part) // Then add in j which makes the colors go around per pixel // the % 96 is to make the wheel cycle around strip.setPixelColor(i, Wheel( ((i * 256 / strip.numPixels()) + j) % 256) ); } strip.show(); // write all the pixels out delay(wait); } } // fill the dots one after the other with said color // good for testing purposes void colorWipe(uint32_t c, uint8_t wait) { int i; for (i=0; i < strip.numPixels(); i++) { strip.setPixelColor(i, c); strip.show(); delay(wait); } } /* Helper functions */ // Create a 24 bit color value from R,G,B uint32_t Color(byte r, byte g, byte b) { uint32_t c; c = r; c <<= 8; c |= g; c <<= 8; c |= b; return c; } //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) { if (WheelPos < 85) { return Color(WheelPos * 3, 255 - WheelPos * 3, 0); } else if (WheelPos < 170) { WheelPos -= 85; return Color(255 - WheelPos * 3, 0, WheelPos * 3); } else { WheelPos -= 170; return Color(0, WheelPos * 3, 255 - WheelPos * 3); } }
Nu we weten dat de LED-strip is werken wij kunnen het uploaden van de feitelijke schets die we willen gebruiken.
De schets die we tijdens de ontwerp-jam om aan te tonen van het werk concept gemaakt.
/* ================================================================= Coded for Wheel Well Design Jam at California College of the Arts By William Felker [www.williamfelker.com] & Analicia Barros [analiciab.tumblr.com] Project inspired by: FLORA Backpack <a href="http://learn.adafruit.com/flora-brakelight-backpack">http://learn.adafruit.com/flora-brakelight-backpac...</a> ================================================================= */ #include "SPI.h" // #include "Adafruit_WS2801.h" // imports LED Library uint8_t dataPin = 10; //Green cable on WS2801 uint8_t clockPin = 9; //Yellow cable on WS2801 const int rightTurn = 12; // the number of the right pushbutton pin const int leftTurn = 6; // the number of the left pushbutton pin int buttonRight = 0; int buttonLeft = 0; Adafruit_WS2801 strip = Adafruit_WS2801((uint16_t)7, (uint16_t)7, dataPin, clockPin); void setup() { strip.begin(); // Makes sure all LEDs start "off" strip.show(); } void loop() { buttonRight = digitalRead(rightTurn); if (buttonRight == LOW ) { // this could easily be made into a for loop //Right center(0,0,0,0); right(16,0,0,255); delay(100); center(0,0,0,0); } else { // turn LED off: center(0,0,0,0); delay(5000); } buttonLeft = digitalRead(leftTurn); if (buttonLeft == LOW) { // this could easily be made into a for loop //LEFT left(1,0,0,255); delay(100); center(0,0,0,0); left(1,0,0,255); delay(100); center(0,0,0,0); } else { // turn LED off: center(0,0,0,0); delay(5000); } /* buttonLeft = digitalRead(leftTurn);<br>if (__ == __) { //Center center(0,0,0,0); center(0,255,255,0); delay(100); center(0,255,225,0); delay(100); center(0,0,0,0); */ } void left(uint16_t n, uint8_t r, uint8_t g, uint8_t b){ for (n=0; n<10; n++) { // Specifies LEDs Range 0-10 strip.setPixelColor(n, r, g, b); strip.show(); } } void right(uint16_t n, uint8_t r, uint8_t g, uint8_t b){ for (n=16; n<25; n++) { // Specifies LEDs Range 16-25 strip.setPixelColor(n, r, g, b); strip.show(); } } void center(uint16_t n, uint8_t r, uint8_t g, uint8_t b){ for (n=0; n<25; n++) { // Specifies LEDs Range 0-25 strip.setPixelColor(n, r, g, b); strip.show(); } }