Satura rādītājs:

Koka LED pulkstenis - analogais stils: 11 soļi (ar attēliem)
Koka LED pulkstenis - analogais stils: 11 soļi (ar attēliem)

Video: Koka LED pulkstenis - analogais stils: 11 soļi (ar attēliem)

Video: Koka LED pulkstenis - analogais stils: 11 soļi (ar attēliem)
Video: Kāds skaitlis no 1 līdz 31 ir dzimis cilvēks, tāda ir visa viņa dzīve 2024, Jūlijs
Anonim
Koka LED pulkstenis - analogais stils
Koka LED pulkstenis - analogais stils

Tas ir analoga stila koka LED pulkstenis. Es nezinu, kāpēc es neesmu redzējis nevienu no šiem … kaut arī digitālie veidi ir ļoti izplatīti. Anyhoo, šeit mēs ejam!

1. darbība:

Attēls
Attēls
Attēls
Attēls

Saplākšņa pulksteņa projekts sākās kā vienkāršs sākuma projekts CNC maršrutētājam. Es skatījos vienkāršus projektus tiešsaistē un atradu šo lampu (attēls iepriekš). Es biju redzējis arī digitālos pulksteņus, kas spīd cauri koka finierim (attēls iepriekš). Tātad abu projektu apvienošana bija acīmredzama ideja. Mēģinot izaicināt sevi, es nolēmu šim projektam neizmantot finieri, bet tikai koka gabalu.

2. solis: projektēšana

Dizains
Dizains
Dizains
Dizains

Es izstrādāju pulksteni Inkscape (attēls iepriekš). Dizains ir ļoti vienkāršs pēc izvēles. Es nolēmu neizlaist vadu pēdas, jo šajā brīdī es nebiju pārliecināts, vai vēlos izmantot radiālo vai perimetrisko vadu. (Es nolēmu beidzot izmantot perimetra vadus.) Viens neopikselis ieiet katrā no mazajiem apaļajiem caurumiem minūšu un stundu laika rādīšanai ar piecu minūšu precizitāti. Aplis vidū tiks novirzīts, lai pielāgotos elektronikai.

3. solis: CNCing

CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing

Es izstrādāju MasterCAM darbarīkus un izmantoju tehnoRouter, lai izfrēzētu pulksteni no 3/4 collu saplākšņa. Šim nolūkam es izmantoju 15 x 15 collu gabalu ar minimālu izšķērdēšanu. Triks ir izvadīt pēc iespējas vairāk koksnes, neizlaužot koku. Atstājot 0,05 "-0,1" ir laba izvēle gaišam kokam. Ja neesat pārliecināts, labāk atstāt vairāk koka, jo jūs vienmēr varat noslīpēt otru seju. Es galu galā no dažām detaļām noņemu nedaudz pārāk daudz koksnes, bet, par laimi, rezultāti tāpēc necieš pārāk daudz.

Piezīme lietotājiem, kuriem nav piekļuves CNC:

Šo projektu var viegli izdarīt ar urbšanas presi. Jums vienkārši jāiestata pieturvieta vietā, kur pamatnē paliek aptuveni 0,1 collas koksnes. Jums būs jābūt precīzam, bet ne pārāk precīzam. Galu galā ideālā gadījumā neviens neredzēs, ka visas gaismas diodes iedegas plkst. tajā pašā laikā, lai jūs varētu izkļūt ar nelielu nogruvumu.

4. solis: elektronika

Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika

Elektronika ir diezgan vienkārša. Ir 24 neopikseļi, divpadsmit stundu rādīšanai un divpadsmit minūšu rādīšanai ar piecu minūšu precizitāti. Arduino pro mini kontrolē neopikseļus, un tas iegūst precīzu laiku, izmantojot DS3231 reālā laika pulksteņa (RTC) moduli. RTC modulim ir monētu šūna kā rezerves kopija, tāpēc tas nezaudē laiku pat tad, kad barošana ir izslēgta.

Materiāls:

Arduino pro mini (vai jebkurš cits Arduino šajā jautājumā)

DS3231 sadalīšanas panelis

Neopikseli atsevišķos sadalīšanas dēļos

5. solis: elektronikas montāža

Elektronikas montāža
Elektronikas montāža
Elektronikas montāža
Elektronikas montāža
Elektronikas montāža
Elektronikas montāža
Elektronikas montāža
Elektronikas montāža

Es pievienoju neopikseļus virknē, izmantojot 2,5 collu vadus pirmajiem divpadsmit gaismas diodēm un četru collu vadu nākamajiem divpadsmit. Es būtu varējis izmantot nedaudz mazākus vadu garumus. Pēc virknes izgatavošanas es to pārbaudīju, pārliecinoties, ka lodēt savienojumi bija labi. Pievienoju mirkļa slēdzi, lai ieslēgtu visas gaismas diodes, lai tikai izrādītos.

6. darbība. Sausais skrējiens

Sausais skrējiens
Sausais skrējiens
Sausais skrējiens
Sausais skrējiens
Sausais skrējiens
Sausais skrējiens
Sausais skrējiens
Sausais skrējiens

Pēc eksperimenta, gaismas diodes ievietošanas caurumos un visu ieslēgšanas es biju apmierināts ar rezultātiem. Tāpēc es nedaudz noslīpēju priekšējo seju un uzklāju PU mēteli. Es vēlāk slīpēju mēteli, bet ir ieteicams to atstāt, ja jums tas nešķiet estētiski nepatīkami.

7. solis: epoksīdsveķis

Epoksīda
Epoksīda
Epoksīda
Epoksīda

Pēc dažām pārbaudēm ar novietoto pozīciju caurumos es sapratu, ka vislabākā diskusija tiek panākta, kad gaismas diodes atrodas aptuveni 0,2 collu attālumā no cauruma gala. Kad jūs pats to izmēģināsit, gaismas diodes spilgtums būs ļoti atšķirīgs katru caurumu. Neuztraucieties par to; mēs to salabosim kodā. Tas ir mana izmantotā urbja veida dēļ. Ja es to darītu vēlreiz, es caurumiem izmantotu lodveida urbi. Bet jebkurā gadījumā, lai iegūtu attālumu, es sajaucu epoksīdu un ievietoju nedaudz katrā caurumā.

8. solis: salieciet to visu kopā

Visu saliekot kopā
Visu saliekot kopā
Visu saliekot kopā
Visu saliekot kopā
Visu saliekot kopā
Visu saliekot kopā
Visu saliekot kopā
Visu saliekot kopā

Gaismas diodes tiks novietotas, sākot no pulksten 12 stundu rokas pozīcijas, virzoties pretēji pulksteņrādītāja virzienam pa visām stundas rādītāju pozīcijām, un pēc tam uz minūtes rādītāju, atkal pārvietojoties no 60 minūšu atzīmes, virzoties pretēji pulksteņrādītāja virzienam. Tas ir tāpēc, ka, skatoties no priekšpuses, LED modelis parādās pulksteņrādītāja virzienā.

Pēc epoksīda sacietēšanas stundu es ievietoju vēl dažus epoksīda savienojumus. Šoreiz es ievietoju gaismas diodes caurumos, pārliecinoties, ka vadi un lodēšanas savienojumi ir pārklāti ar epoksīdu. Tas nodrošina labu gaismas izkliedi un nostiprina vadus.

9. solis: kods

Kods
Kods

Kods ir vietnē GitHub, nekautrējieties to mainīt savai lietošanai. Ieslēdzot visas gaismas diodes vienā līmenī, katrā caurumā spīdīgās gaismas spilgtums būs ļoti atšķirīgs. Tas ir tāpēc, ka caurumos ir atšķirīgs koksnes biezums un koksnes tonis atšķiras, kā redzat, manā gabalā koka krāsa diezgan atšķiras. Lai novērstu šo spilgtuma atšķirību, es izveidoju led spilgtuma līmeņu matricu. Un samazināja spilgtāku gaismas diožu spilgtumu. Tas ir izmēģinājumu un kļūdu process, un tas var aizņemt vairākas minūtes, taču rezultāti ir tā vērti.

saplāksnisPulkstenis.ino

// Saplākšņa pulkstenis
// Autors: tinkrmind
// Attribution 4.0 International (CC BY 4.0). Jūs varat brīvi:
// Kopīgot - kopēt un izplatīt materiālu jebkurā vidē vai formātā
// Pielāgot - remiksēt, pārveidot un veidot materiālu jebkādiem mērķiem, pat komerciāliem mērķiem.
// Urā!
#iekļaut
#include "RTClib.h"
RTC_DS3231 rtc;
#include "Adafruit_NeoPixel.h"
#ifdef _AVR_
#iekļaut
#endif
#definePIN6
Adafruit_NeoPixel strip = Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800);
int hourPixel = 0;
int minutePixel = 0;
unsignedlong lastRtcCheck;
String inputString = ""; // virkne ienākošo datu glabāšanai
Būla virknePabeigta = nepatiesa; // vai virkne ir pabeigta
int līmenis [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
kamēr (! Seriāls); // Leonardo/Micro/Zero
#endif
// Tas ir paredzēts piekariņam 5V 16MHz. Jūs varat noņemt šīs trīs līnijas, ja neizmantojat piekariņu.
#if definēts (_AVR_ATtiny85_)
ja (F_CPU == 16000000) clock_prescale_set (clock_div_1);
#endif
// Pieklājības īpašā koda beigas
Sērijas sākums (9600);
strip.begin ();
strip.show (); // Inicializēt visus pikseļus, lai tie būtu izslēgti
ja (! rtc.begin ()) {
Serial.println ("Nevarēja atrast RTC");
kamēr (1);
}
pinMode (2, INPUT_PULLUP);
// rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));
ja (rtc.lostPower ()) {
Serial.println ("RTC zaudēja jaudu, ļauj iestatīt laiku!");
// nākamā rinda nosaka RTC datumu un laiku, kad šī skice tika apkopota
rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));
// Šī rindiņa nosaka RTC ar precīzu datumu un laiku, piemēram, lai iestatītu
// 2014. gada 21. janvārī pulksten 3:00 jūs zvanītu:
// rtc.adjust (DateTime (2017, 11, 06, 2, 49, 0));
}
// rtc.adjust (DateTime (2017, 11, 06, 2, 49, 0));
// lightUpEven ();
// kamēr (1);
lastRtcCheck = 0;
}
voidloop () {
if (milis () - lastRtcCheck> 2000) {
DateTime now = rtc.now ();
Sērijas nospiedums (tagad.stunda (), DEC);
Serial.print (':');
Sērijas nospiedums (tagad.minūte (), DEC);
Serial.print (':');
Sērijas nospiedums (tagad.second (), DEC);
Sērijas.println ();
laiks izrādei();
lastRtcCheck = milis ();
}
ja (! digitalRead (2)) {
lightUpEven ();
}
if (stringComplete) {
Serial.println (inputString);
ja (inputString [0] == 'l') {
Serial.println ("Līmenis");
lightUpEven ();
}
ja (inputString [0] == 'c') {
Serial.println ("Rāda laiku");
laiks izrādei();
strip.show ();
}
ja (inputString [0] == '1') {
Serial.println ("Visu gaismas diožu ieslēgšana");
lightUp (sloksne. Krāsa (255, 255, 255));
strip.show ();
}
ja (inputString [0] == '0') {
Serial.println ("Klīringa josla");
skaidrs ();
strip.show ();
}
// #3, 255 iestatītu 3. numuru uz 255., 255., 255. līmeni
ja (inputString [0] == '#') {
Stīgu temperatūra;
temp = inputString.substring (1);
int pixNum = temp.toInt ();
temp = inputString.substring (inputString.indexOf (',') + 1);
int intensitāte = temp.toInt ();
Serial.print ("Iestatījums");
Sērijas nospiedums (pixNum);
Serial.print ("līdz līmenim");
Serial.println (intensitāte);
strip.setPixelColor (pixNum, strip. Color (intensitāte, intensitāte, intensitāte));
strip.show ();
}
// #3, 255, 0, 125 iestatītu 3. numuru uz līmeni 255, 0, 125
ja (inputString [0] == '$') {
Stīgu temperatūra;
temp = inputString.substring (1);
int pixNum = temp.toInt ();
int rIndex = inputString.indexOf (',') + 1;
temp = inputString.substring (rIndex);
int rIntensity = temp.toInt ();
intgIndex = inputString.indexOf (',', rIndex + 1) + 1;
temp = inputString.substring (gIndex);
intgIntensity = temp.toInt ();
int bIndex = inputString.indexOf (',', gIndex + 1) + 1;
temp = inputString.substring (bIndex);
int bIntensity = temp.toInt ();
Serial.print ("Iestatījums");
Sērijas nospiedums (pixNum);
Serial.print ("R līdz");
Serial.print (rIntensity);
Serial.print ("G līdz");
Serial.print (gIntensity);
Serial.print ("B līdz");
Serial.println (bIntensity);
strip.setPixelColor (pixNum, strip. Color (rIntensity, gIntensity, bIntensity));
strip.show ();
}
ja (inputString [0] == 's) {
Stīgu temperatūra;
int stunda, minūte;
temp = inputString.substring (1);
stunda = temp.toInt ();
int rIndex = inputString.indexOf (',') + 1;
temp = inputString.substring (rIndex);
minūte = temp.toInt ();
Serial.print ("Rāda laiku:");
Sērijas nospiedums (stunda);
Serial.print (":");
Sērijas nospiedums (minūte);
showTime (stunda, minūte);
kavēšanās (1000);
}
inputString = "";
stringComplete = false;
}
// kavēšanās (1000);
}
voidserialEvent () {
kamēr (Serial.available ()) {
char inChar = (char) Serial.read ();
inputString += inChar;
ja (inChar == '\ n') {
stringComplete = true;
}
kavēšanās (1);
}
}
voidclear () {
par (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, strip. Color (0, 0, 0));
}
}
voidshowTime () {
DateTime now = rtc.now ();
hourPixel = tagad.stunda () % 12;
minutePixel = (tagad.minūte () / 5) % 12 + 12;
skaidrs ();
// strip.setPixelColor (hourPixel, strip. Color (40 + 40 * līmenis [stunduPikselis], 30 + 30 * līmenis [stunduPikselis], 20 + 20 * līmenis [stunduPikselis]));
// strip.setPixelColor (minutePixel, strip. Color (40 + 40 * līmenis [minutePixel], 30 + 30 * level [minutePixel], 20 + 20 * level [minutePixel]));
strip.setPixelColor (stundaPikselis, sloksne. Krāsa (līmenis [stunduPikselis], līmenis [stunduPikselis], līmenis [stundasPikselis]));
strip.setPixelColor (minutePixel, strip. Color (level [minutePixel], level [minutePixel], level [minutePixel]));
// lightUp (sloksne. Krāsa (255, 255, 255));
strip.show ();
}
voidshowTime (int stunda, int minūte) {
hourPixel = stunda % 12;
minutePixel = (minūte / 5) % 12 + 12;
skaidrs ();
// strip.setPixelColor (hourPixel, strip. Color (40 + 40 * līmenis [stunduPikselis], 30 + 30 * līmenis [stunduPikselis], 20 + 20 * līmenis [stunduPikselis]));
// strip.setPixelColor (minutePixel, strip. Color (40 + 40 * līmenis [minutePixel], 30 + 30 * level [minutePixel], 20 + 20 * level [minutePixel]));
strip.setPixelColor (stundaPikselis, sloksne. Krāsa (līmenis [stunduPikselis], līmenis [stunduPikselis], līmenis [stundasPikselis]));
strip.setPixelColor (minutePixel, strip. Color (level [minutePixel], level [minutePixel], level [minutePixel]));
// lightUp (sloksne. Krāsa (255, 255, 255));
strip.show ();
}
voidlightUp (uint32_t krāsa) {
par (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, krāsa);
}
strip.show ();
}
voidlightUpEven () {
par (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, strip. Color (līmenis , līmenis , līmenis ));
}
strip.show ();
}

apskatīt rawplywoodClock.ino, kuru mitina GitHub ar ❤

10. solis: datora redze - kalibrēšana

Datora redze - kalibrēšana
Datora redze - kalibrēšana
Datora redze - kalibrēšana
Datora redze - kalibrēšana

Es apzināti izvēlējos neizmantot finieri šajā projektā. Ja man būtu, koka biezums visu LED priekšā būtu bijis vienāds. Bet, tā kā man ir atšķirīgs koka biezums katras gaismas diodes priekšā un tāpēc, ka arī koka krāsa ir ļoti atšķirīga, katras gaismas diodes spilgtums ir atšķirīgs. Lai visas gaismas diodes būtu vienāda spilgtuma, es izdomāju lielisku triku.

Es uzrakstīju kādu apstrādes kodu (vietnē GitHub), kas uzņem pulksteņa fotoattēlu un pēc kārtas analizē katras gaismas diodes spilgtumu. Pēc tam tas maina katras gaismas diodes jaudu, lai mēģinātu panākt, lai tiem visiem būtu tāds pats spilgtums kā vājākajam LED. Tagad es zinu, ka tas ir pārmērīgi, bet attēlu apstrāde ir ļoti jautra! Un es ceru izstrādāt kalibrēšanas kodu kā bibliotēku.

Iepriekš redzamajos fotoattēlos varat redzēt LED spilgtumu pirms un pēc kalibrēšanas.

calibrateDispllay.pde

importprocessing.video.*;
importprocessing.serial.*;
Sērijas myPort;
Uzņemt video;
finalint numLed = 24;
int ledNum = 0;
// lai izmantotu PxPGetPixelDark (), jums ir jābūt šīm globālajām vabalām
int rDark, gDark, bDark, aDark;
int rLed, gLed, bLed, aLed;
int rOrg, gOrg, bOrg, aOrg;
int rTemp, gTemp, bTemp, aTemp;
PImage ourImage;
int runNumber = 0;
int pieļaujamā kļūda = 3;
int darīts;
int numPixelsInLed;
ilgi ledIntensity;
int ledPower;
garš mērķisIntensitāte = 99999999;
voidsetup () {
darīts = newint [numLed];
numPixelsInLed = newint [numLed];
ledIntensity = jauns [numLed];
ledPower = newint [numLed];
par (int i = 0; i <numLed; i ++) {
ledPower = 255;
}
printArray (Serial.list ());
String portName = Serial.list () [31];
myPort = newSerial (šis, porta nosaukums, 9600);
izmērs (640, 480);
video = newCapture (šis, platums, augstums);
video.start ();
noStroke ();
gluda ();
kavēšanās (1000); // Pagaidiet, līdz tiek atvērts seriālais ports
}
voiddraw () {
ja (video.available ()) {
ja (darīts [ledNum] == 0) {
clearDisplay ();
kavēšanās (1000);
video.lasīt ();
attēls (video, 0, 0, platums, augstums); // Zīmējiet tīmekļa kameras video uz ekrāna
saveFrame ("dati/no_leds.jpg");
ja (runNumber! = 0) {
if ((ledIntensity [ledNum] - targetIntensity)*100/targetIntensity> pieļaujamā kļūda) {
ledPower [ledNum] -= pow (0,75, runNumber)*100+1;
}
if ((targetIntensity - ledIntensity [ledNum])*100/targetIntensity> pieļaujamā kļūda) {
ledPower [ledNum] += pow (0,75, runNumber)*100 +1;
}
if (abs (targetIntensity - ledIntensity [ledNum])*100/targetIntensity <= pieļaujama kļūda) {
darīts [ledNum] = 1;
drukāt ("Led");
drukāt (ledNum);
drukāt ("darīts");
}
ja (ledPower [ledNum]> 255) {
ledPower [ledNum] = 255;
}
ja (ledPower [ledNum] <0) {
ledPower [ledNum] = 0;
}
}
setLedPower (ledNum, ledPower [ledNum]);
kavēšanās (1000);
video.lasīt ();
attēls (video, 0, 0, platums, augstums); // Zīmējiet tīmekļa kameras video uz ekrāna
kavēšanās (10);
kamēr (myPort.available ()> 0) {
int inByte = myPort.read ();
// drukāt (char (inByte));
}
String imageName = "dati/";
imageName+= str (ledNum);
imageName += "_ led.jpg";
saveFrame (attēla nosaukums);
String originalImageName = "dati/organizācija";
originalImageName+= str (ledNum);
originalImageName += ". jpg";
ja (runNumber == 0) {
saveFrame (originalImageName);
}
PImage noLedImg = loadImage ("data/no_leds.jpg");
PImage ledImg = loadImage (attēla nosaukums);
PImage originalImg = loadImage (originalImageName);
noLedImg.loadPixels ();
ledImg.loadPixels ();
originalImg.loadPixels ();
fons (0);
loadPixels ();
ledIntensity [ledNum] = 0;
numPixelsInLed [ledNum] = 0;
par (int x = 0; x <platums; x ++) {
par (int y = 0; y <augstums; y ++) {
PxPGetPixelDark (x, y, noLedImg.pixels, platums);
PxPGetPixelLed (x, y, ledImg.pixels, platums);
PxPGetPixelOrg (x, y, originalImg.pixels, platums);
ja ((rOrg+gOrg/2+bOrg/3)-(rDark+gDark/2+bDark/3)> 75) {
ledIntensity [ledNum] = ledIntensity [ledNum]+(rLed+gLed/2+bLed/3) -(rDark+gDark/2+bDark/3);
rTemp = 255;
gTemp = 255;
bTemp = 255;
numPixelsInLed [ledNum] ++;
} vēl {
rTemp = 0;
gTemp = 0;
bTemp = 0;
}
PxPSetPixel (x, y, rTemp, gTemp, bTemp, 255, pikseļi, platums);
}
}
ledIntensity [ledNum] /= numPixelsInLed [ledNum];
ja (targetIntensity> ledIntensity [ledNum] && runNumber == 0) {
targetIntensity = ledIntensity [ledNum];
}
updatePixels ();
}
drukāt (ledNum);
print (',');
drukāt (ledPower [ledNum]);
print (',');
println (ledIntensity [ledNum]);
ledNum ++;
ja (ledNum == numLed) {
int donezo = 0;
par (int i = 0; i <numLed; i ++) {
donezo += darīts ;
}
ja (donezo == numLed) {
println ("GATAVS");
par (int i = 0; i <numLed; i ++) {
drukāt (i);
drukāt ("\ t");
println (ledPower );
}
print ("int līmenis [");
drukāt (ledNum);
drukāt ("] = {");
par (int i = 0; i <numLed-1; i ++) {
drukāt (ledPower );
print (',');
}
print (ledPower [numLed -1]);
println ("};");
lightUpEven ();
kamēr (taisnība);
}
print ("Mērķa intensitāte:");
ja (runNumber == 0) {
targetIntensity -= 1;
}
println (targetIntensity);
ledNum = 0;
runNumber ++;
}
}
}
voidPxPGetPixelOrg (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelsWidth]; // krāsu iegūšana kā int no pikseļiem
aOrg = (šis pikseļi >> 24) & 0xFF; // mums ir jāmaina un jāmaskē, lai iegūtu katru komponentu atsevišķi
rOrg = (šis pikseļi >> 16) & 0xFF; // tas ir ātrāk nekā izsaukt sarkanu (), zaļu (), zilu ()
gOrg = (šis pikseļu >> 8) & 0xFF;
bOrg = šī pikseļa & 0xFF;
}
voidPxPGetPixelDark (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelsWidth]; // krāsu iegūšana kā int no pikseļiem
aDark = (šis pikseļi >> 24) & 0xFF; // mums ir jāmaina un jāmaskē, lai iegūtu katru komponentu atsevišķi
rDark = (šis pikseļi >> 16) & 0xFF; // tas ir ātrāk nekā izsaukt sarkanu (), zaļu (), zilu ()
gDark = (šis pikseļi >> 8) & 0xFF;
bTumša = šī pikseļa & 0xFF;
}
voidPxPGetPixelLed (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelsWidth]; // krāsu iegūšana kā int no pikseļiem
aLed = (šis pikseļi >> 24) & 0xFF; // mums ir jāmaina un jāmaskē, lai iegūtu katru komponentu atsevišķi
rLed = (šis pikseļi >> 16) & 0xFF; // tas ir ātrāk nekā izsaukt sarkanu (), zaļu (), zilu ()
gLed = (šis pikseļu >> 8) & 0xFF;
bLed = šī pikseļa & 0xFF;
}
voidPxPSetPixel (intx, inty, intr, intg, intb, inta, int pixelArray, intpixelsWidth) {
a = (a << 24);
r = r << 16; // Mēs iesaiņojam visus 4 komponentus vienā int
g = g << 8; // tāpēc mums tie jāpārvieto uz savām vietām
krāsa argb = a | r | g | b; // bināra "vai" darbība tos visus pievieno vienā int
pixelArray [x+y*pixelsWidth] = argb; // visbeidzot mēs iestatām int ar te krāsām pikseļos
}

apskatīt rawcalibrateDispllay.pde, kuru mitina GitHub ar ❤

11. darbība. Piezīmes par atdalīšanu

Kļūdas, no kurām jāizvairās:

* Ar koku jūs saņemat to, par ko maksājat. Tātad, iegūstiet kvalitatīvu koku. Bērza saplāksnis ir laba izvēle; jebkura viegla masīvkoka derēs arī labi. Es nopirku koku un nožēloju savu lēmumu.

* Labāk urbt mazāk nekā vairāk. Pāris caurumi bija pārāk dziļi manam gabalam. Un epoksīdsveiksme parādās priekšpusē. Tas ir ļoti pamanāms, kad to pamanāt.

* Izmantojiet lodveida urbi, nevis taisnu galu. Es neesmu eksperimentējis ar lodīšu gala uzgali, bet esmu diezgan pārliecināts, ka rezultāti būs daudz labāki.

Es flirtēju ar domu pārdot tos vietnē Etsy vai tindie. Es būtu ļoti pateicīgs, ja komentētu zemāk, ja uzskatāt, ka tam ir jēga:)

Ieteicams: