NeoPixel mönster programmerare (1 / 3 steg)
Steg 1: Steg 1: delar och schematiska
För att bygga denna apparat behöver du några delar!
-1 Arduino, jag föredrar Nanos
-En längd av Adafruit Neopixels, använda ett segment av 5 om du inte vill ändra något i min kod
-A växla
-A 1K resistor
-Skärbräda, wire, pcb, något att haka upp allt.
Ledningarna är verkligen enkelt, bara koppla det upp som på schematiskt. För korta längder av LED strip som i detta projekt behöver du inte använda extern ström.
Växeln är att växla mellan display och program-läge om du skriver ett nytt mönster till enheten, och placera den i program-läge så att du inte missar lite.
Detta är koden för Arduino:
Måste du ladda ner NeoPixel biblioteket, EEPROM biblioteket ingår med arduino programvara.
Arduino EEPROM neopixel mönster författare Pieter Pelt 2015
Denna skiss tar värden från eeprom att visa på neopixels, det kan också ta emot nya data och skriva som till eeprom
Tar emot data från medföljande processing skiss
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
#include < EEPROM.h >
#include < Adafruit_NeoPixel.h >
#define stift 3
#define ramar 0
#define dröjsmål 1
#define lysdioder 2
/ * RGB DEFS * /
#define röd 0
#define grön 1
#define BLUE 2
int sw = 2;
Adafruit_NeoPixel strip = Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800);
char eepColor [3]. Innehåller R, G, B-värdena
char programData [3].
void writeRGB (int _addr, char _red, char _green, char _blue)
{
EEPROM.write (_addr + röd, _red); Skriva eeprom med data
EEPROM.write (_addr + GREEN, _green); Skriva eeprom med data
EEPROM.write (_addr + blå, _blue); Skriva eeprom med data
}
void writeEeprom (char _frames, char _delay, char _leds)
{
EEPROM.write (ramar, _frames); Ramar i annimation
EEPROM.write (fördröjning, _delay); Fördröja efter ramar
EEPROM.write (lysdioder, _leds); Lysdioder per band
/*
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);
för (int jag = 3; jag < 16; i = i + 3) writeRGB (i, 255, 255, 0); Fyll frome 1 med yello
för (int jag = 18; jag < 31; i = i + 3) writeRGB (i, 0, 255, 0); Fyll ram 2 med blå
för (int jag = 33; jag < 46; i = i + 3) writeRGB (i, 255, 0, 255); Fyll ram 3 med röd
*/
}
void readEeprom()
{
programData [FRAMES] = EEPROM.read(FRAMES); Få del av ramar
programData [fördröjning] = EEPROM.read(DELAY); Få dröjsmål per ram
programData [lysdioder] = EEPROM.read(LEDS); Få lysdioder per band
}
void initStrip()
{
Strip.BEGIN(); Initiera ledstrip
Strip.show(); Initiera alla pixlar till "off"
}
void getLedData(int _addr)
{
eepColor [röd] = EEPROM.read (_addr + röd);
eepColor [grön] = EEPROM.read (_addr + grönt);
eepColor [blå] = EEPROM.read (_addr + blå);
}
void setup()
{
writeEeprom (8, 100, 5); Skriv ramar, dröjsmål och ledde till eeprom
readEeprom();
initStrip();
Serial.BEGIN(9600);
}
void loop()
{
om (Serial.available() > 0) {
int maxtemp = 16.
int temp [maxtemp];
för (int jag = 0; jag < maxtemp; i ++) {
Temp [i] = Serial.parseInt();
}
om (Serial.read() == "\n") {
om (temp [15] == 200) {//if det sista numret var en 200
EEPROM.write (dröjsmål, temp[14]); Ange fördröjning värdet istället
readEeprom();
}
annat {//else du fick rgb-data så skriver att till EEPROM
för (int jag = 3; jag < maxtemp + 1; i = i + 3) {
writeRGB (temp [15] + i, temp [i - 3], temp [i - 2], temp [i - 1]); senaste värdet i matrisen används för förskjutningen i EEPROM, offset = början på en ny fram
}
}
}
}
om (digitalRead(sw)) {/ / om växla
digitalWrite 13, hög.
för (int jag = 0; jag < programData [FRAMES]; i ++)
{
för (int j = 0; j < programData [lysdioder]; j ++)
{
getLedData (3 + (j * 3) + (3 * jag * programData[LEDS])); Få RGB-data för en ledde
strip.setPixelColor (j, strip. Färg (eepColor [röd], eepColor [grön], eepColor[BLUE])); Ställ in ledde med RGB-värdet
}
Strip.show(); Visa på strip
Delay(int(programData[Delay]));
}
}
annat {
digitalWrite 13, låg.
}
}