Satura rādītājs:
- 1. darbība:
- 2. solis: projektēšana
- 3. solis: CNCing
- 4. solis: elektronika
- 5. solis: elektronikas montāža
- 6. darbība. Sausais skrējiens
- 7. solis: epoksīdsveķis
- 8. solis: salieciet to visu kopā
- 9. solis: kods
- 10. solis: datora redze - kalibrēšana
- 11. darbība. Piezīmes par atdalīšanu
Video: Koka LED pulkstenis - analogais stils: 11 soļi (ar attēliem)
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:58
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:
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
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
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 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
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
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
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ā
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 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
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:
Koka kāzu pulkstenis ar LED apgaismojumu: 8 soļi (ar attēliem)
Koka kāzu pulkstenis ar gaismas diodēm: es sāku šo projektu, lai savai māsai un svainis izveidotu unikālu, unikālu kāzu pulksteni. Vēlējās uztaisīt kaut ko, ko viņi varētu iedegt un parādīt kādu savu kāzu dienas aspektu vēl ilgu laiku. Izgāja daudz dizainu
Koka LED pulkstenis: 5 soļi (ar attēliem)
Koka LED pulkstenis: Koka LED pulkstenis izskatās kā garlaicīga koka kaste, izņemot to, ka laiks spīd cauri tā priekšpusei. Tā vietā, lai apskatītu pelēkas plastmasas gabalu, jums ir jaukāks koka gabals. Tas joprojām saglabā visas savas funkcijas, tostarp
Memory Stick koka misiņa alumīnija stils: 6 soļi
Memory Stick koka misiņa alumīnija stils: es neatbalstu to, kā es to darīju. Man bija vītnes pareizajā izmērā un ar smalku pavedienu, tāpēc es tās izmantoju. Es tos nedaudz izgriezu no taisniem, tāpēc man bija nedaudz jāstrādā, lai to novērstu. Ja jūs to pavedat citā veidā, jums tas jādara … es gribēju
Pulkstenis, pastiprinātājs un neliels koka daudzums : 6 soļi (ar attēliem)
Pulkstenis, pastiprinātājs un nedaudz koka … man ir jāuztaisa statīvs vienam no maniem monitoriem, kurā bija pulkstenis, digitālā analīze
C51 4 bitu elektroniskais pulkstenis - koka pulkstenis: 15 soļi (ar attēliem)
C51 4 bitu elektroniskais pulkstenis - koka pulkstenis: šajā nedēļas nogalē bija nedaudz brīva laika, tāpēc turpinājāt un samontējāt šo 2,40 ASV dolāru 4 bitu DIY elektronisko digitālo pulksteni, ko pirms kāda laika nopirku no AliExpress