Stap 1: Stap 1: onderdelen en schema
Om te bouwen van dit apparaat moet u een paar onderdelen!
-1 Arduino, ik geef de voorkeur Nano
-A lengte van Adafruit Neopixels, een segment van 5 gebruiken als u geen wijzigingen wilt aanbrengen in mijn code
A - schakelen
-A 1K Ohm weerstand
-Breadboard, draad, pcb, om het even wat om haak het allemaal.
De bedrading is echt gemakkelijk, gewoon haak het omhoog zoals op het schema. Voor korte lengtes van LED-strip zoals in dit project, die u niet wilt gebruiken voor externe voeding.
De schakelaar is om te schakelen tussen weergave en programma-modus, als u een nieuw patroon naar het apparaat schrijft, zet het in de programmeermodus om ervoor te zorgen dat u niet missen een beetje.
Dit is de code voor de Arduino:
U zult moeten downloaden van de NeoPixel library, de EEPROM-bibliotheek is opgenomen in de arduino software.
//Arduino EEPROM neopixel pattern writer by Pieter Pelt 2015 //This sketch takes values from the eeprom to show on neopixels, it can also receive new data and write that to the eeprom //Receives data from accompanying processing sketch //Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) #include <EEPROM.h> #include <Adafruit_NeoPixel.h> #define PIN 3 #define FRAMES 0 #define DELAY 1 #define LEDS 2 /* RGB DEFS */ #define RED 0 #define GREEN 1 #define BLUE 2 int sw = 2; Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800); char eepColor[3]; // Contains R, G, B values char programData[3]; void writeRGB(int _addr, char _red, char _green, char _blue) { EEPROM.write(_addr + RED, _red); // Write eeprom with data EEPROM.write(_addr + GREEN, _green); // Write eeprom with data EEPROM.write(_addr + BLUE, _blue); // Write eeprom with data } void writeEeprom(char _frames, char _delay, char _leds) { EEPROM.write(FRAMES, _frames); // Frames in the annimation EEPROM.write(DELAY, _delay); // Delay after frames EEPROM.write(LEDS, _leds); // Leds per strip /* writeRGB(3, 255, 0, 0); writeRGB(6, 0, 255, 0); writeRGB(9, 0, 0, 255); writeRGB(12, 255, 255, 0); writeRGB(15, 0, 255, 255); //for(int i=3; i<16; i=i+3)writeRGB(i, 255, 255, 0); // fill frome 1 with yello for(int i=18; i<31; i=i+3)writeRGB(i, 0, 255, 0); // fill frame 2 with blue for(int i=33; i<46; i=i+3)writeRGB(i, 255, 0, 255); // fill frame 3 with red */ } void readEeprom() { programData[FRAMES] = EEPROM.read(FRAMES); // Get amount of frames programData[DELAY] = EEPROM.read(DELAY); // Get delay per frame programData[LEDS] = EEPROM.read(LEDS); // Get leds per strip } void initStrip() { strip.begin(); // Initialize ledstrip strip.show(); // Initialize all pixels to 'off' } void getLedData(int _addr) { eepColor[RED] = EEPROM.read(_addr + RED); eepColor[GREEN] = EEPROM.read(_addr + GREEN); eepColor[BLUE] = EEPROM.read(_addr + BLUE); } void setup() { writeEeprom(8, 100, 5); // Write frames, delay and led to eeprom readEeprom(); initStrip(); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { int maxtemp = 16; int temp[maxtemp]; for (int i = 0; i < maxtemp; i++) { temp[i] = Serial.parseInt(); } if (Serial.read() == '\n') { if (temp[15] == 200) { //if the last number was a 200 EEPROM.write(DELAY, temp[14]); //set the delay value instead readEeprom(); } else { //else you got rgb data so write that to the EEPROM for (int i = 3; i < maxtemp + 1; i = i + 3) { writeRGB(temp[15] + i, temp[i - 3], temp[i - 2], temp[i - 1]); //last value in the array is used for the offset in the EEPROM, offset = start of a new fram } } } } if (digitalRead(sw)) { // if switch digitalWrite(13, HIGH); for (int i = 0; i < programData[FRAMES]; i++) { for (int j = 0; j < programData[LEDS]; j++) { getLedData(3 + (j * 3) + (3 * i * programData[LEDS])); // Get RGB data for one led strip.setPixelColor(j, strip.Color(eepColor[RED], eepColor[GREEN], eepColor[BLUE])); // Set one led with RGB value } strip.show(); // Display on the strip delay(int(programData[DELAY])); } } else { digitalWrite(13, LOW); } }