Përmbajtje:

Orë LED prej druri - Stil analog: 11 hapa (me fotografi)
Orë LED prej druri - Stil analog: 11 hapa (me fotografi)

Video: Orë LED prej druri - Stil analog: 11 hapa (me fotografi)

Video: Orë LED prej druri - Stil analog: 11 hapa (me fotografi)
Video: Noizy Sherr Live..❌😳 Mos e humbisni 2024, Nëntor
Anonim
Orë LED prej druri - Stil analog
Orë LED prej druri - Stil analog

It'sshtë një orë LED prej druri e stilit analog. Unë nuk e di pse nuk kam parë një nga këto më parë..por pse llojet dixhitale janë shumë të zakonshme. Anyhoo, ja ku po shkojmë!

Hapi 1:

Imazhi
Imazhi
Imazhi
Imazhi

Projekti i orës së kompensatës filloi si një projekt i thjeshtë fillestar për ruterin CNC. Unë po shikoja projekte të thjeshta në internet dhe gjeta këtë llambë (imazhi më sipër). Unë kisha parë edhe orë dixhitale që shkëlqejnë përmes rimesos së drurit (imazhi sipër). Pra, kombinimi i dy projekteve ishte një ide e qartë. Duke kërkuar të sfidoj veten, vendosa të mos përdor rimeso, por vetëm një copë druri për këtë projekt.

Hapi 2: Projektimi

Dizajn
Dizajn
Dizajn
Dizajn

Kam projektuar orën në Inkscape (imazhi më sipër). Dizajni është shumë i thjeshtë sipas zgjedhjes. Unë vendosa kundër gjurmimit të telave, sepse në këtë pikë nuk isha i sigurt nëse do të shkoja me instalime radiale ose perimetrike. (Vendosa të shkoja më në fund me telat rrethues.) Një neopixel futet në secilën nga vrimat e vogla rrethore për të treguar minutën dhe orën, me saktësi pesë minutëshe. Rrethi në mes do të shpartallohet për të akomoduar pajisjet elektronike.

Hapi 3: CNCing

CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing

Unë hartova shtigjet e veglave në MasterCAM dhe përdora një teknikRouter për të nxjerrë orën nga kompensatë 3/4 inç. Unë përdor një copë 15 "x15" për këtë, me humbje minimale. Truku qëndron në nxjerrjen e drurit sa më shumë që të jetë e mundur pa e thyer atë. Largimi nga 0.05 "-0.1" është një zgjedhje e mirë për dru të lehta. Nëse nuk jeni të sigurt, është më mirë të lini më shumë dru, sepse gjithmonë mund të lyeni fytyrën tjetër. Përfundova duke hequr pak shumë dru nga disa pjesë, por fatmirësisht rezultatet nuk vuajnë shumë për shkak të kësaj.

Shënim për përdoruesit pa qasje në një CNC:

Ky projekt lehtë mund të bëhet me një stërvitje. Thjesht duhet të vendosni ndalesën në një pikë ku lini rreth 0.1 dru të mbetur në bazë. Ju do të duhet të jeni të saktë, por jo shumë të saktë. Në fund të fundit, në mënyrë ideale askush nuk do t'i shohë të gjitha dritat LED të ndizen në në të njëjtën kohë, kështu që ju mund të largoheni me një pjerrësi të vogël.

Hapi 4: Elektronikë

Elektronikë
Elektronikë
Elektronikë
Elektronikë
Elektronikë
Elektronikë

Elektronika është mjaft e thjeshtë. Ka 24 neopixelë, dymbëdhjetë për të treguar orët dhe dymbëdhjetë për të treguar minutat, me saktësi pesë-minutëshe. Një Arduino pro mini kontrollon neopixelët dhe merr kohë të saktë përmes një moduli të orës në kohë reale (RTC) DS3231. Moduli RTC ka një qelizë monedhe si rezervë, kështu që nuk humbet kohë edhe kur energjia është e fikur.

Materiali:

Arduino pro mini (ose ndonjë Arduino tjetër për këtë çështje)

Bordi i thyerjes DS3231

Neopixel në bordet individuale të prishjes

Hapi 5: Asambleja e elektronikës

Asambleja elektronike
Asambleja elektronike
Asambleja elektronike
Asambleja elektronike
Asambleja elektronike
Asambleja elektronike
Asambleja elektronike
Asambleja elektronike

Unë i lidha neopixelët në një varg, duke përdorur tela 2.5 për dymbëdhjetë llambat e para dhe tela katër inç për dymbëdhjetë të tjerat. Mund të kisha përdorur gjatësi tela pak më të vogla. Pasi bëra tela, e testova atë, duke u siguruar që saldimi nyjet ishin të mira. Shtova një çelës momental për të ndezur të gjitha led -et, vetëm për tu shfaqur.

Hapi 6: Vrapim i thatë

Vrapim i thatë
Vrapim i thatë
Vrapim i thatë
Vrapim i thatë
Vrapim i thatë
Vrapim i thatë
Vrapim i thatë
Vrapim i thatë

Pasi eksperimentova, vendosa LED në vrima dhe i ndezi të gjitha, unë isha i kënaqur me rezultatet. Kështu që lëmova pak fytyrën e përparme dhe aplikova një shtresë PU. Përfundova duke e lëmuar pallton më vonë, por është një ide e mirë ta lini nëse nuk ju duket estetikisht e pakëndshme.

Hapi 7: Epoksi

Epoksi
Epoksi
Epoksi
Epoksi

Pas disa testimeve me pozicionin e udhëhequr brenda vrimave, kuptova se diskutimi më i mirë arrihet kur LED -të janë rreth 0.2 larg nga fundi i vrimës. Kur ta provoni këtë vetë, shkëlqimi i LED -ve do të jetë shumë i ndryshëm në çdo vrimë. Mos u shqetësoni për këtë; ne do ta rregullojmë atë në kod. Kjo është për shkak të llojit të stërvitjes që kam përdorur. Nëse do ta bëja përsëri, do të përdorja një stërvitje të topit për vrimat Por, në çdo rast, për të marrë distancën, përzieva pak epoksi dhe vendosa pak në secilën vrimë.

Hapi 8: Vendosja e të gjitha së bashku

Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku

LED-të do të vendosen duke filluar nga pozicioni i dorës së orës 12 të orës duke lëvizur në drejtim të akrepave të orës nëpër të gjitha pozicionet e dorës së orës dhe pastaj në dorën e minutës, duke lëvizur përsëri nga shenja e 60 minutës duke lëvizur në drejtim të kundërt. Kjo është kështu që kur shikojmë nga përpara modeli LED shfaqet duke shkuar në drejtim të akrepave të orës.

Pasi epoksi u shërua për një orë, vendosa edhe disa epoksi. Këtë herë, i vendosa LED -et në vrima, duke u siguruar që të mbuloj telat dhe lidhjet me epoksi. Kjo bën një difuzion të mirë të dritës dhe siguron telat.

Hapi 9: Kodi

Kodi
Kodi

Kodi është në GitHub, mos ngurroni ta modifikoni për përdorimin tuaj. Kur ndizni të gjitha LED në të njëjtin nivel, shkëlqimi i dritës që shkëlqen do të jetë shumë i ndryshëm në secilën vrimë. Kjo është për shkak të trashësisë së ndryshme të drurit në vrima dhe ndryshimit në hijen e drurit, Siç mund ta shihni, ngjyra e drurit ndryshon mjaft në copën time. Për të korrigjuar këtë ndryshim në shkëlqim, unë bëra një matricë të niveleve të shkëlqimit të udhëhequr. Dhe zvogëloi shkëlqimin e LED -ve më të ndritshëm. Processshtë një proces gjykimi dhe gabimi dhe mund të zgjasë disa minuta, por rezultatet ia vlen.

kompensatëClock.ino

// Ora kompensatë
// Autori: tinkrmind
// Atributi 4.0 Ndërkombëtar (CC NGA 4.0). Ju jeni të lirë të:
// Ndani - kopjoni dhe rishpërndani materialin në çdo medium ose format
// Përshtateni - rimiksoni, transformoni dhe ndërtoni mbi materialin për çfarëdo qëllimi, qoftë edhe komercial.
// Hurray!
#përfshi
#përfshi "RTClib.h"
RTC_DS3231 rtc;
#përfshi "Adafruit_NeoPixel.h"
#ifdef _AVR_
#përfshi
#endif
#përcaktoPIN6
Rrip Adafruit_NeoPixel = Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800);
int orëPixel = 0;
int minutePixel = 0;
i panënshkruar lastRtcCheck;
String inputString = ""; // një varg për të mbajtur të dhënat hyrëse
varg booleanComplete = false; // nëse vargu është i plotë
niveli int [24] = {31, 51, 37, 64, 50, 224, 64, 102, 95, 255, 49, 44, 65, 230, 80, 77, 102, 87, 149, 192, 67, 109, 68, 77};
voidsetup () {
#ifndef ESP8266
ndërsa (! Serial); // për Leonardo/Micro/Zero
#endif
// Kjo është për Trinket 5V 16MHz, ju mund t'i hiqni këto tre rreshta nëse nuk po përdorni një xhingël
#nëse përcaktohet (_AVR_ATtiny85_)
nëse (F_CPU == 16000000) clock_prescale_set (clock_div_1);
#endif
// Kodi i posaçëm i xhingël
Serial.filloj (9600);
strip.filloj ();
shirit.shfaq (); // Filloni të gjithë pikselët në "jo"
nëse (! rtc.filloj ()) {
Serial.println ("Nuk mund të gjej RTC");
ndërsa (1);
}
pinMode (2, INPUT_PULLUP);
// rtc.adjust (DataTime (F (_ DATE_), F (_ TIME_)));
nëse (rtc.lostPower ()) {
Serial.println ("RTC humbi fuqinë, lejon të caktojmë kohën!");
// rreshti i mëposhtëm vendos RTC në datën dhe kohën kur është përpiluar kjo skicë
rtc.adjust (DataTime (F (_ DATE_), F (_ TIME_)));
// Kjo linjë vendos RTC me një datë dhe kohë të qartë, për shembull për të vendosur
// 21 janar 2014 në orën 3 të mëngjesit do të telefononit:
// rtc.adjust (DataTime (2017, 11, 06, 2, 49, 0));
}
// rtc.adjust (DataTime (2017, 11, 06, 2, 49, 0));
// lightUpEven ();
// ndërsa (1);
lastRtcCheck = 0;
}
voidloop () {
if (millis () - lastRtcCheck> 2000) {
DataTime tani = rtc.now ();
Serial.print (tani. Orë (), DEC);
Serial.print (':');
Serial.print (tani.minute (), DEC);
Serial.print (':');
Serial.print (tani. E dyta (), DEC);
Serial.println ();
Koha e shfaqjes();
lastRtcCheck = milis ();
}
nëse (! digitalRead (2)) {
lightUpEven ();
}
nëse (stringComplete) {
Serial.println (inputString);
nëse (inputString [0] == 'l') {
Serial.println ("Niveli");
lightUpEven ();
}
nëse (inputString [0] == 'c') {
Serial.println ("Koha e shfaqjes");
Koha e shfaqjes();
shirit.shfaq ();
}
nëse (inputString [0] == '1') {
Serial.println ("Ndezja e të gjitha LED -ve");
lightUp (shirit. Ngjyra (255, 255, 255));
shirit.shfaq ();
}
nëse (inputString [0] == '0') {
Serial.println ("Shiriti i pastrimit");
qartë();
shirit.shfaq ();
}
// #3, 255 do të vendoste numrin led 3 në nivelin 255, 255, 255
nëse (inputString [0] == '#') {
Temperatura e vargut;
temp = inputString.substring (1);
int pixNum = temp.toInt ();
temp = inputString.substring (inputString.indexOf (',') + 1);
int intensiteti = temp.toInt ();
Serial.print ("Vendosja");
Serial.print (pixNum);
Serial.print ("në nivel");
Serial.println (intensiteti);
strip.setPixelColor (pixNum, strip. Color (intensiteti, intensiteti, intensiteti));
shirit.shfaq ();
}
// #3, 255, 0, 125 do të vendosnin numrin led 3 në nivelin 255, 0, 125
nëse (inputString [0] == '$') {
Temperatura e vargut;
temp = inputString.substring (1);
int pixNum = temp.toInt ();
int rIndex = inputString.indexOf (',') + 1;
temp = inputString.substring (rIndex);
int rIntensiteti = temp.toInt ();
intgIndex = inputString.indexOf (',', rIndex + 1) + 1;
temp = inputString.substring (gIndex);
intgIntensiteti = temp.toInt ();
int bIndex = inputString.indexOf (',', gIndex + 1) + 1;
temp = inputString.substring (bIndex);
int bIntensiteti = temp.toInt ();
Serial.print ("Cilësimi");
Serial.print (pixNum);
Serial.print ("R to");
Serial.print (rIntensiteti);
Serial.print ("G to");
Serial.print (gIntensiteti);
Serial.print ("B to");
Serial.println (bIntensiteti);
strip.setPixelColor (pixNum, strip. Color (rIntensiteti, gIntensiteti, bIntensiteti));
shirit.shfaq ();
}
nëse (inputString [0] == 's') {
Temperatura e vargut;
orë int, minutë;
temp = inputString.substring (1);
orë = temp.toInt ();
int rIndex = inputString.indexOf (',') + 1;
temp = inputString.substring (rIndex);
minutë = temp.toInt ();
Serial.print ("Koha e shfaqjes:");
Serial.print (orë);
Serial.print (":");
Serial.print (minutë);
koha e shfaqjes (orë, minutë);
vonesa (1000);
}
inputString = "";
stringComplete = false;
}
// vonesa (1000);
}
voidserialEvent () {
ndërsa (Seriali i disponueshëm ()) {
char inChar = (char) Serial.read ();
inputString += inChar;
nëse (inChar == '\ n') {
stringComplete = true;
}
vonesa (1);
}
}
voidclear () {
për (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, strip. Color (0, 0, 0));
}
}
voidshowTime () {
DataTime tani = rtc.now ();
orëPixel = tani. orë () % 12;
minutePixel = (tani.minute () / 5) % 12 + 12;
qartë();
// strip.setPixelColor (orëPixel, strip. Color (niveli 40 + 40 * [orëPixel], niveli 30 + 30 * [orëPixel], niveli 20 + 20 * [orëPixel]));
// strip.setPixelColor (minutePixel, strip. Color (niveli 40 + 40 * [minutePixel], niveli 30 + 30 * [minutePixel], niveli 20 + 20 * [minutePixel]));
strip.setPixelColor (orëPixel, strip. Color (niveli [orëPixel], niveli [orëPixel], niveli [orëPixel]));
strip.setPixelColor (minutePixel, strip. Color (niveli [minutePixel], niveli [minutePixel], niveli [minutePixel]));
// lightUp (shirit. Ngjyra (255, 255, 255));
shirit.shfaq ();
}
voidshowTime (ora int, minuta int) {
orëPixel = orë % 12;
minutePixel = (minutë / 5) % 12 + 12;
qartë();
// strip.setPixelColor (orëPixel, strip. Color (niveli 40 + 40 * [orëPixel], niveli 30 + 30 * [orëPixel], niveli 20 + 20 * [orëPixel]));
// strip.setPixelColor (minutePixel, strip. Color (niveli 40 + 40 * [minutePixel], niveli 30 + 30 * [minutePixel], niveli 20 + 20 * [minutePixel]));
strip.setPixelColor (orëPixel, strip. Color (niveli [orëPixel], niveli [orëPixel], niveli [orëPixel]));
strip.setPixelColor (minutePixel, strip. Color (niveli [minutePixel], niveli [minutePixel], niveli [minutePixel]));
// lightUp (shirit. Ngjyra (255, 255, 255));
shirit.shfaq ();
}
voidlightUp (ngjyra uint32_t) {
për (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, ngjyra);
}
shirit.shfaq ();
}
voidlightUpEven () {
për (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, strip. Color (niveli , niveli , niveli ));
}
shirit.shfaq ();
}

shikoni rawplywoodClock.ino të pritur me ❤ nga GitHub

Hapi 10: Vizioni kompjuterik - Kalibrimi

Vizioni kompjuterik - Kalibrimi
Vizioni kompjuterik - Kalibrimi
Vizioni kompjuterik - Kalibrimi
Vizioni kompjuterik - Kalibrimi

Kam bërë një zgjedhje të vetëdijshme për të mos përdorur rimeso në këtë projekt. Nëse do të kisha, trashësia e drurit do të ishte e njëjtë para të gjitha LED -ve. Por, për shkak se kam një trashësi të ndryshme të drurit para secilës LED dhe sepse ngjyra e drurit ndryshon shumë gjithashtu, shkëlqimi i LED është i ndryshëm për secilën LED. Për të bërë që të gjitha LED -të të kenë të njëjtën shkëlqim, unë krijova një truk të mrekullueshëm.

Shkrova një kod përpunimi (në GitHub) i cili bën një fotografi të orës dhe analizon shkëlqimin e secilës LED me radhë. Pastaj ndryshon fuqinë në secilën LED për t'u përpjekur që të gjithë të kenë të njëjtën shkëlqim si LED më i zbehtë. Tani, e di që kjo është e tepërt, por përpunimi i imazhit është shumë argëtues! Dhe, shpresoj të zhvilloj kodin e kalibrimit si bibliotekë.

Ju mund të shihni shkëlqimin LED para dhe pas kalibrimit në fotot e mësipërme.

calibrateDispllay.pde

importprocessing.video.*;
importprocessing.serial.*;
Seriali myPort;
Regjistroni video;
finalint numLed = 24;
int ledNum = 0;
// duhet të kesh këto variabla globale për të përdorur PxPGetPixelDark ()
int rDark, gDark, bDark, aDark;
int rLed, gLed, bLed, aLed;
int rOrg, gOrg, bOrg, aOrg;
int rTemp, gTemp, bTemp, aTemp;
PImage ourImage;
int runNumer = 0;
int i pranueshëmError = 3;
int bërë;
int numPixelsInLed;
long ledIntensiteti;
int ledPower;
synimi i gjatë Intensiteti = 99999999;
voidsetup () {
bërë = newint [numLed];
numPixelsInLed = newint [numLed];
ledIntensiteti = newlong [numLed];
ledPower = newint [numLed];
për (int i = 0; i <numLed; i ++) {
ledPower = 255;
}
printArray (Serial.list ());
Emri i portit të vargut = Lista seriale () [31];
myPort = newSerial (kjo, emri i portit, 9600);
madhësia (640, 480);
video = newCapture (kjo, gjerësia, lartësia);
video.fillo ();
noStroke ();
qetë ();
vonesa (1000); // Prisni që porta serike të hapet
}
voiddraw () {
nëse (video.të disponueshme ()) {
nëse (bërë [ledNum] == 0) {
clearDisplay ();
vonesa (1000);
video.lexo ();
imazh (video, 0, 0, gjerësi, lartësi); // Vizatoni videon e kamerës në internet në ekran
saveFrame ("data/no_leds.jpg");
nëse (runNumber! = 0) {
if ((ledIntensity [ledNum] - targetIntensity)*100/targetIntensity> pranueshmeError) {
ledPower [ledNum] -= pow (0.75, runNumber)*100+1;
}
if ((targetIntensity - ledIntensity [ledNum])*100/targetIntensity> pranueshmeError) {
ledPower [ledNum] += pow (0.75, runNumber)*100 +1;
}
if (abs (targetIntensity - ledIntensity [ledNum])*100/targetIntensity <= pranueshmeError) {
bërë [ledNum] = 1;
print ("Led");
print (ledNum);
shtyp ("e kryer");
}
nëse (ledPower [ledNum]> 255) {
ledPower [ledNum] = 255;
}
nëse (ledPower [ledNum] <0) {
ledPower [ledNum] = 0;
}
}
setLedPower (ledNum, ledPower [ledNum]);
vonesa (1000);
video.lexo ();
imazh (video, 0, 0, gjerësi, lartësi); // Vizatoni videon e kamerës në internet në ekran
vonesa (10);
ndërsa (myPort.available ()> 0) {
int inByte = myPort.read ();
// print (char (inByte));
}
Emri i imazhit të vargut = "të dhëna/";
emri i imazhit+= str (ledNum);
Emri i imazhit += "_ led.jpg";
saveFrame (Emri i imazhit);
String originalImageName = "data/org";
origjinalImageName+= str (ledNum);
origjinalImageName += ". jpg";
nëse (runNumber == 0) {
saveFrame (origjinalImageName);
}
PImage noLedImg = loadImage ("data/no_leds.jpg");
PImage ledImg = loadImage (Emri i imazhit);
PImage originalImg = loadImage (originalImageName);
noLedImg.loadPixels ();
ledImg.loadPixels ();
origjinalImg.loadPixels ();
sfond (0);
loadPixels ();
ledIntensiteti [ledNum] = 0;
numPixelsInLed [ledNum] = 0;
për (int x = 0; x <gjerësia; x ++) {
për (int y = 0; y <lartësia; y ++) {
PxPGetPixelDark (x, y, noLedImg.pixels, gjerësi);
PxPGetPixelLed (x, y, ledImg.pixels, gjerësia);
PxPGetPixelOrg (x, y, origjinalImg.pixel, gjerësi);
nëse ((rOrg+gOrg/2+bOrg/3)-(rDark+gDark/2+bDark/3)> 75) {
ledIntensiteti [ledNum] = ledIntensiteti [ledNum]+(rLed+gLed/2+bLed/3) -(rDark+gDark/2+bDark/3);
rTemp = 255;
gTemp = 255;
bTemp = 255;
numPixelsInLed [ledNum] ++;
} tjetër {
rTemp = 0;
gTemp = 0;
bTemp = 0;
}
PxPSetPixel (x, y, rTemp, gTemp, bTemp, 255, piksele, gjerësi);
}
}
ledIntensiteti [ledNum] /= numPixelsInLed [ledNum];
if (targetIntensity> ledIntensity [ledNum] && runNumber == 0) {
targetIntensity = ledIntensity [ledNum];
}
updatePixels ();
}
print (ledNum);
print (',');
print (ledPower [ledNum]);
print (',');
println (ledIntensiteti [ledNum]);
ledNum ++;
nëse (ledNum == numLed) {
int donezo = 0;
për (int i = 0; i <numLed; i ++) {
donezo += bërë ;
}
nëse (donezo == numLed) {
println ("Bërë");
për (int i = 0; i <numLed; i ++) {
shtyp (i);
print ("\ t");
println (ledPower );
}
print ("niveli int [");
print (ledNum);
print ("] = {");
për (int i = 0; i <numLed-1; i ++) {
print (ledPower );
print (',');
}
print (ledPower [numLed -1]);
println ("};");
lightUpEven ();
ndërsa (e vërtetë);
}
print ("Intensiteti i synuar:");
nëse (runNumber == 0) {
targetIntensiteti -= 1;
}
println (Intensiteti i synuar);
ledNum = 0;
runNumber ++;
}
}
}
voidPxPGetPixelOrg (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelsWidth]; // marrja e ngjyrave si int nga pikselët
aOrg = (ky Pixel >> 24) & 0xFF; // ne duhet të zhvendosemi dhe të maskojmë për të marrë secilin komponent vetëm
rOrg = (ky Pixel >> 16) & 0xFF; // kjo është më e shpejtë sesa të thërrasësh të kuqe (), jeshile (), blu ()
gOrg = (ky Pixel >> 8) & 0xFF;
bOrg = ky Pixel & 0xFF;
}
voidPxPGetPixelDark (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelsWidth]; // marrja e ngjyrave si int nga pikselët
aDark = (ky Pixel >> 24) & 0xFF; // ne duhet të zhvendosemi dhe të maskojmë për të marrë secilin komponent vetëm
rDark = (ky Pixel >> 16) & 0xFF; // kjo është më e shpejtë sesa të thërrasësh të kuqe (), jeshile (), blu ()
gDark = (ky Pixel >> 8) & 0xFF;
bDark = kjo Pixel & 0xFF;
}
voidPxPGetPixelLed (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelsWidth]; // marrja e ngjyrave si int nga pikselët
aLed = (ky Pixel >> 24) & 0xFF; // ne duhet të zhvendosemi dhe të maskojmë për të marrë secilin komponent vetëm
rLed = (ky Pixel >> 16) & 0xFF; // kjo është më e shpejtë sesa të thërrasësh të kuqe (), jeshile (), blu ()
gLed = (ky Pixel >> 8) & 0xFF;
bLed = kjo Pixel & 0xFF;
}
voidPxPSetPixel (intx, inty, intr, intg, intb, inta, int pixelArray, intpixelsWidth) {
a = (a << 24);
r = r << 16; // Ne po i paketojmë të 4 përbërjet në një int
g = g << 8; // kështu që ne duhet t'i zhvendosim në vendet e tyre
ngjyra argb = a | r | g | b; // operacioni binar "ose" i shton të gjitha në një int
pixelArray [x+y*pixelsWidth] = argb; // së fundmi ne vendosim int me ngjyrat te në piksel
}

shikoni rawcalibrateDispllay.pde e pritur me ❤ nga GitHub

Hapi 11: Vërejtje ndarëse

Kurthe për të shmangur:

* Me dru, ju merrni atë që paguani. Pra, merrni dru me cilësi të mirë. Kompensatë thupër është një zgjedhje e mirë; çdo dru i fortë i lehtë do të bëjë mirë gjithashtu. Bëra çmim të ulët në dru dhe pendohem për vendimin tim.

* Bettershtë më mirë të shposh më pak se më shumë. Disa vrima shkuan shumë thellë për pjesën time. Dhe epoksi shfaqet në pjesën e përparme të fytyrës. Veryshtë shumë e dukshme sapo ta vini re.

* Përdorni një stërvitje në fund të topit në vend të një fundi të drejtë. Unë nuk kam eksperimentuar me fundin e topit, por jam shumë i sigurt se rezultatet do të jenë shumë më të mira.

Unë jam duke flirtuar me idenë e shitjes së këtyre në Etsy ose tindie. Unë vërtet do ta vlerësoja nëse mund të komentonit më poshtë nëse mendoni se ka kuptim:)

Recommended: