Stap 1: De Code
Ik experimenteerde met meer secties, maar meer dan 10 veroorzaakt teveel cpu-gebruik.
Kort daarna besloot ik te implementeren TouchOSC in het programma om te zorgen voor controle van de iPhone. Die code is niet opgenomen in dit instructable, maar als u e-mail me (cgmalantonio ik zal graag sturen u de code. Deze code voorziet in een knevel op de sfeerverlichting, evenals de RGB schuiven en een XY touchpad voor het genereren van nog meer kleuren.
Nou, laten we beginnen!
Eerst hebben we de Arduino-code, dit is verantwoordelijk voor het nemen van de RGB-waarden van de Processing Schets en het uitvoeren van deze waarden aan de NeoPixel strook.
--------------------------------------------------------------------------------------------
--------------------------------Arduino Sketch----------------------------------------
--------------------------------------------------------------------------------------------
Ambi: AmbientNeoPixel Arduino Sketch
Gemaakt door: Cory Malantonio
#include < Adafruit_NeoPixel.h >
#define PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800);
int r [11]; matrix voor elke kleurwaarde
int g [11];
int b [11];
VOID Setup {}
Serial.begin(9600);
strip.begin(); prep de neopixel
strip.show();
}
void loop {}
Als (Serial.available() > = 31) {}
Als (Serial.read() == 0xff) {}
voor (int x = 1 x < 11; x ++) {}
r [x] = Serial.read(); Lees in de waarden van verwerking
g [x] = Serial.read(); in dezelfde volgorde wij hen gezonden
b [x] = Serial.read();
r [x] = beperken (r [x], 0, 255); net incase enige waarden slip weg
g [x] = beperken (g [x], 0, 255);
b [x] = beperken (b [x], 0, 255);
}
}
}
int Xval = 1; tellen tot 30
int Yval = 2; tijdens het laden van de RGB-waarden
int Zval = 3; in 3 geleid is tegelijk
voor (int z = 1; z < 11; z ++) {}
strip.setPixelColor (Xval, r [z], g [z], b[z]);
strip.setPixelColor (Yval, r [z], g [z], b[z]);
strip.setPixelColor (Zval, r [z], g [z], b[z]);
Xval = Xval + 3;
Yval = Yval + 3;
Zval = Zval + 3;
}
strip.show(); uitgang naar de neopixel
vertraging(20); voor veiligheid
}
--------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
Hier is de schets van de verwerking,
de enige echte aanpassing zul je te maken zullen de lijn
poort = nieuwe Serial (dit, Serial.list() [#], 9600;
de # verwijst naar het nummer van de usb-apparaat dat de arduino is aangesloten.
Ik stel 0, dan 1, dan 2, enz te proberen tot u vindt die u gebruikt.
--------------------------------------------------------------------------------------------
--------------------------------Processing Sketch-----------------------------------
--------------------------------------------------------------------------------------------
bewerken: Ik kreeg een grote e-mail vragend over het wijzigen van de resolutie over de processing schets.
Sindsdien veranderd heb ik uit de schets van de verwerking met een meer geschikt om te bewerken (zonder om te duiken in de code).
--------------------------------------------------------------------------------------------
/ * Ambi2: AmbientNeoPixel Processing Schets
** Gecreëerd door: Cory Malantonio
** ambiArray is gebaseerd op een ontwerp door Rajarshi Roy
*/
importeren van cc.arduino.*;
importeren van java.awt.Robot;
importeren van java.awt.AWTException;
importeren van java.awt.event.InputEvent;
importeren van java.awt.image.BufferedImage;
importeren van java.awt.Rectangle;
importeren van java.awt.Dimension;
importeren van processing.serial.*;
---Instellen resolutie hier---/ /
int resX = 1920;
int resY = 1080;
//-------------------------------//
int sectW = resX / 10; Sectiebreedte voor de 10 secties
int SectRx = sectW / 4; Sectie resolutie voor x
int SectRy = resY / 4; Sectie resolutie voor y
Seriële poort;
Robot GrabRGBval;
VOID Setup
{
poort = nieuwe Serial (dit, Serial.list() [2], 9600);
Serial.List() [#], # = USB-apparaatnummer
Probeer
{
GrabRGBval = nieuwe Robot();
}
vangst (AWTException e)
{
println ("Robot klasse niet ondersteund door uw systeem!");
Exit();
}
grootte (200, 200);
Background(0);
noFill();
}
VOID draw()
{
int pixel;
zweven [] rA = nieuwe float [11];
[] gA zweven = nieuwe float [11];
float [] bA = nieuwe float [11];
int [] reso = nieuwe int [11];
voor (int Ar = 1; AR < 11; AR++) {//load de resoluties in de array
Reso [Ar] = sectW * Ar; 192 is 1/10de van de resolutie 1920
}
zweven r = 0;
zweven van g = 0;
zweven b = 0;
Reso [0] = 0;
Screenshot van BufferedImage = GrabRGBval.createScreenCapture (nieuwe rechthoek (nieuwe dimensie (resX, resY)));
voor (int LED = 1; LED < 11; LED++) {}
int x = 0;
int y = 0;
Reso matrix stappen in 10ths van de resolutie van 1920, beginnend bij 0
voor (x = reso [LED-1]; x < reso [LED]; x = x + 4) {//"x + 4" is overslaan van pixels
voor (y = 0; y < resY; y = y + 4) {/ / om te helpen deze sneller wordt uitgevoerd
pixel = screenshot.getRGB (x, y);
r = r+(int) (255 & (pixel >> 16));
g = g+(int) (255 & (pixel >> 8));
b = b+(int) (255 & (pixel));
}
}
r=r/(SectRx*SectRy); 48 is 1/4e elke 10e van het scherm. Hierboven zijn we het overslaan van pixels
g=g/(SectRx*SectRy); We zitten met 1/4 de pixels.
b=b/(SectRx*SectRy); 270 is 1/4 van de resolutie 1080
rA [LED] = r;
gA [LED] = g;
bA [LED] = b;
}
Port.write(0xFF); schrijven marker, arduino is op zoek naar dit
voor (int Br = 1; BR < 11; BR++) {}
Port.write((byte)(RA[br]));
Port.write((byte)(gA[br]));
Port.write((byte)(BA[br]));
}
delay(10); vertraging voor veiligheid
voor (int kegel = 1; kegel < 11; kegel ++) {}
Fill(0);
beroerte (rA [kegel], gA [kegel], bA[cOne]);
rect ((cOne-1) * 20, 0, kegel * 20, 200);
vulling (rA [kegel], gA [kegel], bA[cOne]);
rect ((cOne-1) * 20, 0, kegel * 20, 200);
}
}