Turinys:

Medinis LED laikrodis - analoginis stilius: 11 žingsnių (su paveikslėliais)
Medinis LED laikrodis - analoginis stilius: 11 žingsnių (su paveikslėliais)

Video: Medinis LED laikrodis - analoginis stilius: 11 žingsnių (su paveikslėliais)

Video: Medinis LED laikrodis - analoginis stilius: 11 žingsnių (su paveikslėliais)
Video: Часы G-Shock до 250 долларов-15 лучших часов Casio G до 250 доллар... 2024, Lapkritis
Anonim
Medinis LED laikrodis - analoginio stiliaus
Medinis LED laikrodis - analoginio stiliaus

Tai analoginio stiliaus medinis LED laikrodis. Nežinau, kodėl vieno iš jų nemačiau anksčiau, nors skaitmeniniai tipai yra labai paplitę. Anyhoo, štai!

1 žingsnis:

Vaizdas
Vaizdas
Vaizdas
Vaizdas

Faneros laikrodžio projektas prasidėjo kaip paprastas pradinis CNC maršrutizatoriaus projektas. Žiūrėjau į paprastus projektus internete ir radau šią lempą (vaizdas viršuje). Aš taip pat mačiau skaitmeninius laikrodžius, kurie šviečia per medžio lukštą (vaizdas viršuje). Taigi, derinti du projektus buvo akivaizdi idėja. Siekdama mesti sau iššūkį, nusprendžiau šiam projektui nenaudoti faneros, o tik medžio gabalo.

2 žingsnis: dizainas

Dizainas
Dizainas
Dizainas
Dizainas

Aš sukūriau laikrodį „Inkscape“(vaizdas viršuje). Dizainas yra labai paprastas pasirinkus. Nusprendžiau netaikyti laidų pėdsakų, nes šiuo metu nebuvau tikras, ar noriu naudoti radialinius ar perimetrinius laidus. (Nusprendžiau pagaliau pereiti prie perimetro laidų.) Į kiekvieną mažą apskritą skylutę įeina po vieną neopikselį, kuris rodo minučių ir valandų laiką penkių minučių tikslumu. Apskritimas viduryje bus nukreiptas taip, kad tilptų elektronika.

3 žingsnis: CNCing

CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing

Aš sukūriau įrankių takus „MasterCAM“ir naudoju technoRouter, kad išstumčiau laikrodį iš 3/4 colių faneros. Tam naudoju 15 x 15 colių gabalą, su minimaliu švaistymu. Apgaulė yra išleisti kuo daugiau medienos, nesulaužant medienos. Palikti 0,05 "-0,1" yra geras pasirinkimas šviesiai medienai. Jei nesate tikri, geriau palikti daugiau medienos, nes visada galite šlifuoti kitą veidą. Galų gale iš kai kurių dalių pašalinau šiek tiek per daug medienos, bet, laimei, rezultatai dėl to per daug nenukenčia.

Pastaba vartotojams, neturintiems prieigos prie CNC:

Šį projektą galima lengvai atlikti naudojant gręžimo presą. Jums tereikia nustatyti sustojimą toje vietoje, kur bazėje lieka apie 0,1 colio medienos. Turėsite būti tikslūs, bet ne per daug tikslūs. Galų gale, idealiu atveju niekas nematys, kaip visi šviesos diodai užsidegs tuo pačiu metu, todėl galite išsisukti su nedideliu nuolydžiu.

4 žingsnis: Elektronika

Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika

Elektronika yra gana paprasta. Yra 24 neopikseliai, dvylika-valandoms rodyti, dvylika-minutėms rodyti penkių minučių tikslumu. „Arduino pro mini“valdo neopikselius ir per DS3231 realaus laiko laikrodžio (RTC) modulį gauna tikslų laiką. RTC modulis turi monetos elementą kaip atsarginę kopiją, todėl nepraranda laiko net ir išjungus maitinimą.

Medžiaga:

„Arduino pro mini“(ar bet kuris kitas „Arduino“)

DS3231 pertraukimo plokštė

Neopikseliai atskirose pertraukų lentose

5 žingsnis: Elektronikos surinkimas

Elektronikos surinkimas
Elektronikos surinkimas
Elektronikos surinkimas
Elektronikos surinkimas
Elektronikos surinkimas
Elektronikos surinkimas
Elektronikos surinkimas
Elektronikos surinkimas

Aš prijungiau neopikselius eilute, naudodamas 2,5 colio laidus pirmiesiems dvylika šviesos diodų ir keturių colių laidą kitiems dvylikai. Galėjau naudoti šiek tiek mažesnius laidų ilgius. Padaręs eilutę, išbandžiau ir įsitikinau, kad lydmetalis Sujungimai buvo geri. Pridėjau momentinį jungiklį, kad įjungčiau visus šviesos diodus, kad tik parodyčiau.

6 žingsnis: sausas važiavimas

Sausas bėgimas
Sausas bėgimas
Sausas bėgimas
Sausas bėgimas
Sausas bėgimas
Sausas bėgimas
Sausas bėgimas
Sausas bėgimas

Eksperimentuodamas, įdėjęs šviesos diodus į skyles ir įjungęs juos visus, buvau patenkintas rezultatais. Taigi šiek tiek nušlifavau priekinį veidą ir uždėjau PU sluoksnį. Galų gale vėliau nušlifavau paltą, tačiau gera idėja jį palikti, jei jums tai nepatinka estetiškai.

7 žingsnis: epoksidinė

Epoksidinė
Epoksidinė
Epoksidinė
Epoksidinė

Po tam tikro bandymo su švino padėtimi skylėse supratau, kad geriausia diskusija pasiekiama, kai šviesos diodai yra maždaug 0,2 colio atstumu nuo skylės galo. Kai patys tai išbandysite, šviesos diodų ryškumas bus labai skirtingas kiekviena skylė. Nesijaudinkite dėl to; mes ją pataisysime kodu. Taip yra dėl mano naudojamo grąžto tipo. Jei tai padaryčiau dar kartą, skylėms naudočiau rutulinį grąžtą Bet bet kokiu atveju, norėdamas gauti atstumą, sumaišiau epoksidą ir šiek tiek įdėjau į kiekvieną skylę.

8 žingsnis: surinkite viską kartu

Viską sujungti
Viską sujungti
Viską sujungti
Viską sujungti
Viską sujungti
Viską sujungti
Viską sujungti
Viską sujungti

Šviesos diodai bus dedami pradedant nuo 12 valandos rodyklės padėties, judant prieš laikrodžio rodyklę per visas valandos rodyklės pozicijas, o paskui į minutinę rodyklę, vėl judant nuo 60 minučių žymos, judančios prieš laikrodžio rodyklę. Taip yra todėl, kad kai žiūrime iš priekio, LED modelis rodomas pagal laikrodžio rodyklę.

Po to, kai epoksidinė medžiaga valandą sukietėjo, aš įdėjau dar šiek tiek epoksido. Šį kartą šviesos diodus įdėjau į skyles, įsitikindamas, kad laidai ir litavimo jungtys yra padengti epoksidine medžiaga. Tai užtikrina gerą šviesos sklaidą ir apsaugo laidus.

9 žingsnis: kodas

Kodas
Kodas

Kodas yra „GitHub“, nedvejodami pakeiskite jį savo reikmėms. Kai įjungiate visus šviesos diodus į tą patį lygį, kiekvienoje skylėje sklindančios šviesos ryškumas bus labai skirtingas. Taip yra dėl skirtingo medžio storio skylėse ir medžio atspalvio skirtumo, kaip matote, medžio spalva mano kūrinyje labai skiriasi. Norėdami ištaisyti šį ryškumo skirtumą, sukūriau LED šviesumo lygių matricą. Ir sumažino šviesesnių šviesos diodų ryškumą. Tai bandymų ir klaidų procesas ir gali užtrukti kelias minutes, tačiau rezultatai to verti.

plywoodClock.ino

// Faneros laikrodis
// Autorius: tinkrmind
// „Attribution 4.0 International“(CC BY 4.0). Galite laisvai:
// Dalintis - kopijuoti ir platinti medžiagą bet kokia laikmena ar formatu
// Pritaikyti - remiksuoti, transformuoti ir kurti medžiagą bet kokiu tikslu, net ir komerciškai.
// Hurra!
#įtraukti
#include "RTClib.h"
RTC_DS3231 rtc;
#include "Adafruit_NeoPixel.h"
#ifdef _AVR_
#įtraukti
#endif
#definePIN6
Adafruit_NeoPixel strip = Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800);
int hourPixel = 0;
int minutePikselis = 0;
unsignedlong lastRtcCheck;
Eilutės įvestisString = ""; // eilutė gaunamiems duomenims laikyti
loginė eilutėComplete = false; // ar eilutė baigta
int lygis [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
while (! Serial); // Leonardo/Micro/Zero
#endif
// Tai skirta „Trinket 5V 16MHz“, galite pašalinti šias tris eilutes, jei nenaudojate „Trinket“
#if apibrėžta (_AVR_ATtiny85_)
if (F_CPU == 16000000) clock_prescale_set (clock_div_1);
#endif
// Paminklo specialaus kodo pabaiga
Serial.begin (9600);
strip.begin ();
strip.show (); // Inicijuokite visus taškus į „išjungtą“
if (! rtc.begin ()) {
Serial.println ("Nepavyko rasti RTC");
tuo tarpu (1);
}
pinMode (2, INPUT_PULLUP);
// rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));
if (rtc.lostPower ()) {
Serial.println ("RTC dingo energija, leidžia nustatyti laiką!");
// kita eilutė nustato RTC datą ir laiką, kai buvo sudarytas šis eskizas
rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)));
// Ši eilutė nustato RTC su konkrečia data ir laiku, pavyzdžiui, nustatyti
// 2014 m. Sausio 21 d. 3 val. Skambintumėte:
// rtc.adjust (DateTime (2017, 11, 06, 2, 49, 0));
}
// rtc.adjust (DateTime (2017, 11, 06, 2, 49, 0));
// lightUpEven ();
// while (1);
lastRtcCheck = 0;
}
voidloop () {
if (millis () - lastRtcCheck> 2000) {
DateTime dabar = rtc.now ();
Serijinis atspaudas (now.hour (), DEC);
Serial.print (':');
Serijinis atspaudas (dabar.minutė (), DEC);
Serial.print (':');
Serial.print (dabar.second (), DEC);
Serial.println ();
pasirodymas();
lastRtcCheck = milis ();
}
if (! digitalRead (2)) {
lightUpEven ();
}
if (stringComplete) {
Serial.println (inputString);
if (inputString [0] == 'l') {
Serial.println („Lygis“);
lightUpEven ();
}
if (inputString [0] == 'c') {
Serial.println („Rodomas laikas“);
pasirodymas();
strip.show ();
}
if (inputString [0] == '1') {
Serial.println („Visų šviesos diodų įjungimas“);
„lightUp“(juostelė. Spalva (255, 255, 255));
strip.show ();
}
if (inputString [0] == '0') {
Serial.println („Valymo juosta“);
aišku ();
strip.show ();
}
// #3, 255 nustatytų 3 skaičių į 255, 255, 255 lygį
if (inputString [0] == '#') {
Styginių temperatūra;
temp = inputString.substring (1);
int pixNum = temp.toInt ();
temp = inputString.substring (inputString.indexOf (',') + 1);
int intensyvumas = temp.toInt ();
Serial.print („Nustatymas“);
Serial.print (pixNum);
Serial.print ("iki lygio");
Serial.println (intensyvumas);
strip.setPixelColor (pixNum, strip. Color (intensyvumas, intensyvumas, intensyvumas));
strip.show ();
}
// #3, 255, 0, 125 nustatytų 3 skaičių iki 255, 0, 125 lygio
if (inputString [0] == '$') {
Styginių 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 („Nustatymas“);
Serial.print (pixNum);
Serial.print („R“);
Serial.print (rIntensity);
Serial.print („G“);
Serial.print (gIntensity);
Serial.print (nuo „B iki“);
Serial.println (bIntensity);
strip.setPixelColor (pixNum, strip. Color (rIntensity, gIntensity, bIntensity));
strip.show ();
}
if (inputString [0] == 's) {{
Styginių temperatūra;
int valanda, minutė;
temp = inputString.substring (1);
valanda = temp.toInt ();
int rIndex = inputString.indexOf (',') + 1;
temp = inputString.substring (rIndex);
minutė = temp.toInt ();
Serial.print ("Rodomas laikas:");
Serijinis atspaudas (valanda);
Serial.print (":");
Serial.print (minutė);
showTime (valanda, minutė);
vėlavimas (1000);
}
inputString = "";
stringComplete = false;
}
// uždelsimas (1000);
}
voidserialEvent () {
while (Serial.available ()) {
char inChar = (char) Serial.read ();
inputString += inChar;
jei (inChar == '\ n') {
stringComplete = tiesa;
}
uždelsimas (1);
}
}
voidclear () {
for (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, strip. Color (0, 0, 0));
}
}
voidshowTime () {
DateTime dabar = rtc.now ();
hourPixel = dabar.valanda () % 12;
minutePixel = (dabar.minute () / 5) % 12 + 12;
aišku ();
// strip.setPixelColor (hourPixel, strip. Color (40 + 40 * lygis [hourPixel], 30 + 30 * level [hourPixel], 20 + 20 * level [hourPixel]));
// strip.setPixelColor (minutePixel, strip. Color (40 + 40 * lygis [minutePixel], 30 + 30 * level [minutePixel], 20 + 20 * level [minutePixel]));
strip.setPixelColor (hourPixel, strip. Color (lygis [valandaPikselis], lygis [valandaPikselis], lygis [valandaPikselis]));
strip.setPixelColor (minutePixel, strip. Color (level [minutePixel], level [minutePixel], level [minutePixel]));
// lightUp (strip. Color (255, 255, 255));
strip.show ();
}
voidshowTime (vid. valanda, vid. minutė) {
hourPixel = valanda % 12;
minutePixel = (minutė / 5) % 12 + 12;
aišku ();
// strip.setPixelColor (hourPixel, strip. Color (40 + 40 * lygis [hourPixel], 30 + 30 * level [hourPixel], 20 + 20 * level [hourPixel]));
// strip.setPixelColor (minutePixel, strip. Color (40 + 40 * lygis [minutePixel], 30 + 30 * level [minutePixel], 20 + 20 * level [minutePixel]));
strip.setPixelColor (hourPixel, strip. Color (level [hourPixel], level [hourPixel], level [hourPixel]));
strip.setPixelColor (minutePixel, strip. Color (level [minutePixel], level [minutePixel], level [minutePixel]));
// lightUp (strip. Color (255, 255, 255));
strip.show ();
}
voidlightUp (uint32_t spalva) {
for (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, spalva);
}
strip.show ();
}
voidlightUpEven () {
for (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, strip. Color (lygis , lygis , lygis ));
}
strip.show ();
}

peržiūrėkite rawplywoodClock.ino, kurį su ❤ priglobia „GitHub“

10 žingsnis: kompiuterio matymas - kalibravimas

Kompiuterinė vizija - kalibravimas
Kompiuterinė vizija - kalibravimas
Kompiuterinė vizija - kalibravimas
Kompiuterinė vizija - kalibravimas

Aš sąmoningai nusprendžiau nenaudoti faneros šiame projekte. Jei turėčiau, prieš visus šviesos diodus medžio storis būtų buvęs vienodas. Bet kadangi prieš kiekvieną šviesos diodą turiu skirtingo storio medienos ir kadangi medžio spalva taip pat labai skiriasi, kiekvieno šviesos diodo ryškumas yra skirtingas. Kad visi šviesos diodai atrodytų vienodo ryškumo, sugalvojau puikų triuką.

Aš parašiau tam tikrą apdorojimo kodą („GitHub“), kuris nufotografuoja laikrodį ir paeiliui analizuoja kiekvieno šviesos diodo ryškumą. Tada kiekvienos šviesos diodo galia keičiama, kad būtų užtikrintas toks pat ryškumas kaip ir silpniausio šviesos diodo. Dabar žinau, kad tai per daug, bet vaizdų apdorojimas yra labai smagus! Ir aš tikiuosi sukurti kalibravimo kodą kaip biblioteką.

Aukščiau esančiose nuotraukose galite pamatyti šviesos diodų ryškumą prieš ir po kalibravimo.

calibrateDispllay.pde

importprocessing.video.*;
importprocessing.serial.*;
Serijinis myPort;
Užfiksuoti vaizdo įrašą;
finalint numLed = 24;
int ledNum = 0;
// kad galėtumėte naudoti PxPGetPixelDark (), turite turėti šiuos visuotinius žodžius
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 priimtinaKlaida = 3;
int padaryta;
int numPixelsInLed;
ilgas ledIntensity;
int ledPower;
ilgas targetIntensity = 99999999;
voidsetup () {
atlikta = newint [numLed];
numPixelsInLed = newint [numLed];
ledIntensity = naujas [numLed];
ledPower = newint [numLed];
už (int i = 0; i <numLed; i ++) {
ledPower = 255;
}
printArray (Serial.list ());
Eilutės portName = Serial.list () [31];
myPort = newSerial (tai, uosto pavadinimas, 9600);
dydis (640, 480);
video = newCapture (tai, plotis, aukštis);
video.start ();
noStroke ();
lygus ();
vėlavimas (1000); // Palaukite, kol atsidarys nuoseklusis prievadas
}
voiddraw () {
if (video.available ()) {
jei (padaryta [ledNum] == 0) {
clearDisplay ();
vėlavimas (1000);
video.read ();
vaizdas (vaizdo įrašas, 0, 0, plotis, aukštis); // Nubrėžkite internetinės kameros vaizdo įrašą ant ekrano
saveFrame ("data/no_leds.jpg");
if (runNumber! = 0) {
if ((ledIntensity [ledNum] - targetIntensity)*100/targetIntensity> priimtina klaida) {
ledPower [ledNum] -= pow (0,75, runNumber)*100+1;
}
if ((targetIntensity - ledIntensity [ledNum])*100/targetIntensity> priimtina klaida) {
ledPower [ledNum] += pow (0,75, runNumber)*100 +1;
}
if (abs (targetIntensity - ledIntensity [ledNum])*100/targetIntensity <= priimtina klaida) {
padaryta [ledNum] = 1;
spauda („Led“);
spausdinti (ledNum);
spausdinti („padaryta“);
}
jei (ledPower [ledNum]> 255) {
ledPower [ledNum] = 255;
}
if (ledPower [ledNum] <0) {
ledPower [ledNum] = 0;
}
}
setLedPower (ledNum, ledPower [ledNum]);
vėlavimas (1000);
video.read ();
vaizdas (vaizdo įrašas, 0, 0, plotis, aukštis); // Nubrėžkite internetinės kameros vaizdo įrašą ant ekrano
vėlavimas (10);
o (myPort.available ()> 0) {
int inByte = myPort.read ();
// spausdinti (char (inByte));
}
Styga imageName = "duomenys/";
imageName+= str (ledNum);
imageName += "_ led.jpg";
saveFrame (vaizdo pavadinimas);
String originalImageName = "duomenys/organizacija";
originalImageName+= str (ledNum);
originalImageName += ". jpg";
if (runNumber == 0) {
saveFrame (originalImageName);
}
PImage noLedImg = loadImage ("data/no_leds.jpg");
PImage ledImg = loadImage (vaizdo pavadinimas);
PImage originalImg = loadImage (originalImageName);
noLedImg.loadPixels ();
ledImg.loadPixels ();
originalImg.loadPixels ();
fonas (0);
loadPixels ();
ledIntensity [ledNum] = 0;
numPixelsInLed [ledNum] = 0;
(int x = 0; x <plotis; x ++) {
(int y = 0; y <aukštis; y ++) {
PxPGetPixelDark (x, y, noLedImg.pixels, width);
PxPGetPixelLed (x, y, ledImg.pikseliai, plotis);
PxPGetPixelOrg (x, y, originalImg.pixels, width);
jei ((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] ++;
} Kitas {
rTemp = 0;
gTemp = 0;
bTemp = 0;
}
PxPSetPixel (x, y, rTemp, gTemp, bTemp, 255, pikseliai, plotis);
}
}
ledIntensity [ledNum] /= numPixelsInLed [ledNum];
if (targetIntensity> ledIntensity [ledNum] && runNumber == 0) {
targetIntensity = ledIntensity [ledNum];
}
updatePixels ();
}
spausdinti (ledNum);
spausdinti (',');
spausdinti (ledPower [ledNum]);
spausdinti (',');
println (ledIntensity [ledNum]);
ledNum ++;
if (ledNum == numLed) {
int donezo = 0;
už (int i = 0; i <numLed; i ++) {
donezo += padaryta ;
}
if (donezo == numLed) {
println („ATLIKTA“);
už (int i = 0; i <numLed; i ++) {
spausdinti (i);
spausdinti ("\ t");
println (ledPower );
}
spausdinti ("int level [");
spausdinti (ledNum);
spausdinti ("] = {");
už (int i = 0; i <numLed-1; i ++) {
spausdinti (ledPower );
spausdinti (',');
}
spausdinti (ledPower [numLed -1]);
println ("};");
lightUpEven ();
o (tiesa);
}
spausdinti („Tikslinis intensyvumas:“);
if (runNumber == 0) {
targetIntensity -= 1;
}
println (targetIntensity);
ledNum = 0;
runNumber ++;
}
}
}
voidPxPGetPixelOrg (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelsWidth]; // spalvų gavimas kaip int iš pikselių
aOrg = (šisPikselis >> 24) & 0xFF; // turime pereiti ir maskuoti, kad kiekvienas komponentas būtų vienas
rOrg = (šisPikselis >> 16) & 0xFF; // tai greičiau nei skambinti raudona (), žalia (), mėlyna ()
gOrg = (šis pikselis >> 8) & 0xFF;
bOrg = šisPikselis & 0xFF;
}
voidPxPGetPixelDark (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelsWidth]; // spalvų gavimas kaip int iš pikselių
aDark = (šisPikselis >> 24) & 0xFF; // turime pereiti ir maskuoti, kad kiekvienas komponentas būtų vienas
rDark = (šisPikselis >> 16) & 0xFF; // tai greičiau nei skambinti raudona (), žalia (), mėlyna ()
gDark = (šisPikselis >> 8) & 0xFF;
bTamsus = šisPikselis & 0xFF;
}
voidPxPGetPixelLed (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelsWidth]; // spalvų gavimas kaip int iš pikselių
aLed = (šisPikselis >> 24) & 0xFF; // turime pereiti ir maskuoti, kad kiekvienas komponentas būtų vienas
rLed = (šisPikselis >> 16) & 0xFF; // tai greičiau nei skambinti raudona (), žalia (), mėlyna ()
gLed = (šisPikselis >> 8) & 0xFF;
bLed = šisPikselis & 0xFF;
}
voidPxPSetPixel (intx, inty, int, intg, intb, inta, int pixelArray, intpixelsWidth) {
a = (a << 24);
r = r << 16; // Mes supakuojame visus 4 komponentus į vieną int
g = g << 8; // todėl turime juos perkelti į savo vietas
spalva argb = a | r | g | b; // dvejetainė "arba" operacija prideda juos visus į vieną int
pixelArray [x+y*pixelsWidth] = argb; // galiausiai mes nustatome int su te spalvomis į pikselius
}

peržiūrėkite rawcalibrateDispllay.pde, kurį su „❤“priglobia „GitHub“

11 žingsnis: pastabos

Spąstai, kurių reikia vengti:

* Su mediena jūs gaunate tai, už ką mokate. Taigi, įsigykite geros kokybės medieną. Beržo fanera yra geras pasirinkimas; bet kokia lengva medžio masyvo medžiaga taip pat puikiai tinka. Nusipirkau medienos ir gailiuosi dėl savo sprendimo.

* Geriau gręžti mažiau nei daugiau. Keletas skylių buvo per gilios mano kūriniui. Ir epoksidas pasirodo ant priekinio veido. Tai labai pastebima, kai tik tai pastebite.

* Vietoj tiesaus galo naudokite rutulinį grąžtą. Aš neeksperimentavau su rutuliniu galais, bet esu tikras, kad rezultatai bus daug geresni.

Flirtuoju su mintimi parduoti juos „Etsy“ar „tindie“. Būčiau labai dėkingas, jei galėtumėte pakomentuoti žemiau, jei manote, kad tai prasminga:)

Rekomenduojamas: