Mundarija:

Yog'ochli LED soat - Analog uslub: 11 qadam (rasmlar bilan)
Yog'ochli LED soat - Analog uslub: 11 qadam (rasmlar bilan)

Video: Yog'ochli LED soat - Analog uslub: 11 qadam (rasmlar bilan)

Video: Yog'ochli LED soat - Analog uslub: 11 qadam (rasmlar bilan)
Video: $ 100 ostida G Shock soatlari-Top 15 eng yaxshi Casio G Shock soatlari $ 100 sotib olish 2018 2024, Noyabr
Anonim
Yog'ochli LED soat - analog uslub
Yog'ochli LED soat - analog uslub

Bu analog uslubdagi yog'ochdan yasalgan LED soat. Men bilmayman, nega men bunlardan birini ko'rmaganman … raqamli turlar juda keng tarqalgan bo'lsa ham. Yaxshiyamki, keldik!

1 -qadam:

Rasm
Rasm
Rasm
Rasm

Kontrplak soati loyihasi CNC router uchun oddiy boshlang'ich loyiha sifatida boshlandi. Men Internetda oddiy loyihalarni ko'rib chiqdim va bu chiroqni topdim (yuqoridagi rasm). Men, shuningdek, yog'ochdan yasalgan shpondan yaltirab turgan raqamli soatlarni ham ko'rganman (yuqoridagi rasm). Shunday qilib, ikkita loyihani birlashtirish aniq g'oya edi. Men o'zimni shubha ostiga qo'ymoqchi bo'ldim, bu loyiha uchun shpon emas, balki faqat yog'och bo'lagidan foydalanishga qaror qildim.

2 -qadam: Dizayn

Dizayn
Dizayn
Dizayn
Dizayn

Men soatni Inkscape -da yaratdim (yuqoridagi rasm). Tanlash bo'yicha dizayn juda oddiy. Men simlarning izlarini yo'naltirmaslikka qaror qildim, chunki bu vaqtda men radial yoki perimetrli simlar bilan borishni xohlamadim. (Men nihoyat perimetrli simlar bilan borishga qaror qildim.) Har birida bitta dumaloq teshikning har birida bir daqiqali va soatlik vaqtni ko'rsatish uchun bitta neopiksel bor, besh daqiqali aniqlik bilan. O'rtadagi aylana elektronikani joylashtirish uchun yo'naltiriladi.

3 -qadam: CNCing

CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing

Men MasterCAM -da asboblar yo'llarini ishlab chiqdim va 3/4 dyuymli kontrplakdan soatni ajratish uchun technoRouter -dan foydalandim. Buning uchun men 15 "x15" bo'lagidan foydalanaman, minimal isrofgarchilik bilan. Hiyla - o'tinni kesib o'tmasdan, iloji boricha ko'proq yog'ochni tashqariga chiqarish. 0,05 "-0,1" qoldirish engil yog'och uchun yaxshi tanlovdir. Agar ishonchingiz komil bo'lmasa, yog'ochni ko'proq qoldiring, chunki siz har doim boshqa yuzni zımparalashingiz mumkin. Men oxir -oqibat ba'zi qismlardan juda ko'p yog'ochni olib tashladim, lekin shukurki, natijalar juda ko'p zarar ko'rmaydi.

CNC -ga ulanmagan foydalanuvchilar uchun eslatma:

Ushbu loyihani matkap yordamida oson bajarish mumkin. Siz faqat to'xtash joyini 0,1 dyuymli yog'och qoldirib ketadigan joyga qo'yishingiz kerak. Siz aniq bo'lishingiz kerak, lekin unchalik aniq emas. Axir, hech kim barcha LEDlarning yonishini ko'rmaydi. bir vaqtning o'zida, shuning uchun siz ozgina qiyalik bilan qochishingiz mumkin.

4 -qadam: elektronika

Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika

Elektronika juda oddiy. Besh daqiqali aniqlik bilan 24 ta neopiksel, soatni ko'rsatish uchun o'n ikkita va daqiqalarni ko'rsatish uchun o'n ikkita. Arduino pro mini neopixellarni boshqaradi va aniq vaqtni DS3231 real vaqtda soat (RTC) moduli orqali oladi. RTC moduli zaxira sifatida tanga uyasiga ega, shuning uchun elektr quvvati o'chirilgan bo'lsa ham vaqt yo'qotmaydi.

Materiallar:

Arduino pro mini (yoki boshqa Arduino)

DS3231 uzilish taxtasi

Shaxsiy taxtalarda neopiksellar

5 -qadam: elektronika yig'ilishi

Elektronika yig'ilishi
Elektronika yig'ilishi
Elektronika yig'ilishi
Elektronika yig'ilishi
Elektronika yig'ilishi
Elektronika yig'ilishi
Elektronika yig'ilishi
Elektronika yig'ilishi

Men neopixellarni sim bilan bog'ladim, birinchi o'n ikkita led uchun 2,5 dyuymli simlar va keyingi o'n ikkita uchun to'rt dyuymli simlardan foydalanishim mumkin edi. Men biroz kichikroq sim uzunliklaridan foydalanishim mumkin edi. Ipni yasab bo'lgach, men uni sinab ko'rdim va lehimga ishonch hosil qildim. bo'g'inlar yaxshi edi. Men hamma chiroqlarni yoqish uchun bir lahzali kalitni qo'shdim, faqat ko'rsatish uchun.

6 -qadam: Quruq yugurish

Quruq yugurish
Quruq yugurish
Quruq yugurish
Quruq yugurish
Quruq yugurish
Quruq yugurish
Quruq yugurish
Quruq yugurish

Tajribadan so'ng, LEDlarni teshiklarga qo'yib, hammasini yoqgandan so'ng, natijalardan qoniqdim. Shunday qilib, men old yuzni biroz zımparaladim va poliuretan po'stini qo'lladim. Oxir -oqibat men paltoni silamoqchi bo'ldim, lekin agar siz uni estetik nuqtai nazardan yoqtirmasangiz, uni qoldirganingiz ma'qul.

7 -qadam: Epoksi

Epoksi
Epoksi
Epoksi
Epoksi

Teshiklar ichidagi etakchi pozitsiyani sinab ko'rganimdan so'ng, menimcha, LEDlar teshik oxiridan 0,2 dyuym masofada bo'lsa, eng yaxshi munozaraga erishish mumkin. Buni o'zingiz sinab ko'rganingizda, LEDlarning yorqinligi juda boshqacha bo'ladi. Har bir teshik. Bu haqda xavotir olmang, biz buni kodda tuzatamiz. Bu men ishlatgan matkap turiga bog'liq. Agar men yana shunday qilsam, men teshiklar uchun burg'ulash uchidan foydalanardim. Lekin, har holda, masofani olish uchun men epoksi aralashtirib, har bir teshikka ozgina qo'ydim.

8 -qadam: Hammasini bir joyga to'plash

Hammasini bir joyga to'plash
Hammasini bir joyga to'plash
Hammasini bir joyga to'plash
Hammasini bir joyga to'plash
Hammasini bir joyga to'plash
Hammasini bir joyga to'plash
Hammasini bir joyga to'plash
Hammasini bir joyga to'plash

LEDlar soat yo'nalishi bo'yicha soat sohasi farqli o'laroq, soat yo'nalishi bo'yicha, soat yo'nalishi bo'yicha, keyin soat yo'nalishi bo'yicha, soat yo'nalishi bo'yicha, 60-daqiqali belgidan o'tadi. Shunday qilib, biz old tomondan qaraganimizda, LED chizig'i soat yo'nalishi bo'yicha aylanadi.

Epoksi bir soat quriganidan so'ng, men yana epoksi qo'ydim. Bu safar men LEDlarni teshiklarga joylashtirdim, simlar va lehim bo'g'inlarini epoksi bilan yopganimga ishonch hosil qildim. Bu yaxshi yorug'lik tarqalishini ta'minlaydi va simlarni mustahkamlaydi.

9 -qadam: kod

Kod
Kod

Kod GitHub -da, uni ishlatish uchun o'zgartirishingiz mumkin. Agar siz barcha LEDlarni bir xil darajaga qo'ysangiz, yorug'lik porlashi har bir teshikda juda farq qiladi. Buning sababi shundaki, teshiklardagi yog'ochning har xil qalinligi va soyaning farqi, Ko'rib turganingizdek, yog'ochning rangi mening qismimda bir oz farq qiladi. Yorqinlikdagi bu farqni bartaraf etish uchun men yorug'lik yorqinligi darajasining matritsasini tuzdim. Va yorqinroq LEDlarning yorqinligi pasayadi. Bu sinov va xato jarayoni va bir necha daqiqa vaqt olishi mumkin, lekin natijalar bunga arziydi.

jahongir

// Kontrplak soati
// Muallif: tinkrmind
// Attribution 4.0 International (CC BY 4.0). Siz erkinsiz:
// Ulashish - materialni istalgan muhitda yoki formatda nusxalash va qayta tarqatish
// Moslashtiring - materialni har qanday maqsadda, hatto tijorat maqsadlarida ham qayta tuzing, o'zgartiring va asoslang.
// Ura!
#qo'shing
#"RTClib.h" ni qo'shing
RTC_DS3231 rtc;
#"Adafruit_NeoPixel.h" ni qo'shing
#ifdef _AVR_
#qo'shing
#endif
#PINP6 belgilang
Adafruit_NeoPixel tasmasi = Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800);
int hourPixel = 0;
int daqiqaPixel = 0;
unsignedlong lastRtcCheck;
String inputString = ""; // kiruvchi ma'lumotlarni saqlash uchun qator
boolean stringComplete = false; // satr tugallanganmi
int darajasi [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 (! Seriyali); // Leonardo/Micro/Zero uchun
#endif
// Bu Trinket 5V 16MHz uchun, agar siz Trinketdan foydalanmasangiz, ushbu uchta qatorni olib tashlashingiz mumkin.
#if aniqlangan (_AVR_ATtiny85_)
agar (F_CPU == 16000000) clock_prescale_set (clock_div_1);
#endif
// Trinketning maxsus kodining oxiri
Serial.begin (9600);
strip.begin ();
strip.show (); // Barcha piksellarni o'chirib qo'ying
agar (! rtc.begin ()) {
Serial.println ("RTC topilmadi");
vaqt (1);
}
pinMod (2, INPUT_PULLUP);
// rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)))));
agar (rtc.lostPower ()) {
Serial.println ("RTC kuchini yo'qotdi, vaqtni belgilashga ruxsat bering!");
// keyingi satrda RTC bu eskiz tuzilgan sana va vaqtga o'rnatiladi
rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))));
// Bu satr RTCni aniq sana va vaqt bilan belgilaydi, masalan o'rnatish uchun
// 2014 yil 21 -yanvar, soat 03:00 da siz qo'ng'iroq qilardingiz:
// rtc.adjust (DateTime (2017, 11, 06, 2, 49, 0));
}
// rtc.adjust (DateTime (2017, 11, 06, 2, 49, 0));
// lightUpEven ();
// vaqt (1);
lastRtcCheck = 0;
}
voidloop () {
if (millis () - lastRtcCheck> 2000) {
DateTime now = rtc.now ();
Serial.print (hozir.soat (), DEC);
Serial.print (':');
Serial.print (now.minute (), DEC);
Serial.print (':');
Serial.print (hozir.sekund (), DEC);
Serial.println ();
vaqtni ko'rsat();
lastRtcCheck = millis ();
}
agar (! digitalRead (2)) {
lightUpEven ();
}
if (stringComplete) {
Serial.println (inputString);
if (inputString [0] == 'l') {
Serial.println ("Daraja");
lightUpEven ();
}
if (inputString [0] == 'c') {
Serial.println ("Vaqt ko'rsatiladi");
vaqtni ko'rsat();
strip.show ();
}
if (inputString [0] == '1') {
Serial.println ("Barcha LEDlarni yoqish");
lightUp (tasma. Rang (255, 255, 255));
strip.show ();
}
if (inputString [0] == '0') {
Serial.println ("Tozalash chizig'i");
aniq ();
strip.show ();
}
// #3, 255 raqamli 3 -raqamni 255, 255, 255 darajaga o'rnatadi
if (inputString [0] == '#') {
String harorati;
temp = inputString.substring (1);
int pixNum = temp.toInt ();
temp = inputString.substring (inputString.indexOf (',') + 1);
int intensivligi = temp.toInt ();
Serial.print ("sozlash");
Serial.print (pixNum);
Serial.print ("darajaga");
Serial.println (intensivlik);
strip.setPixelColor (pixNum, strip. Color (intensivlik, intensivlik, intensivlik));
strip.show ();
}
// #3, 255, 0, 125 3 -sonli raqamni 255, 0, 125 darajaga o'rnatadi
agar (inputString [0] == '$') {
String harorati;
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 ("sozlash");
Serial.print (pixNum);
Serial.print ("R dan");
Serial.print (rIntensity);
Serial.print ("G dan");
Serial.print (gIntensity);
Serial.print ("B dan");
Serial.println (bIntensity);
strip.setPixelColor (pixNum, strip. Color (rIntensity, gIntensity, bIntensity));
strip.show ();
}
if (inputString [0] == s)) {
String harorati;
int soat, daqiqa;
temp = inputString.substring (1);
soat = temp.toInt ();
int rIndex = inputString.indexOf (',') + 1;
temp = inputString.substring (rIndex);
daqiqa = temp.toInt ();
Serial.print ("Vaqt ko'rsatiladi:");
Ketma -ket chop etish (soat);
Serial.print (":");
Ketma -ket chop etish (daqiqa);
showTime (soat, daqiqa);
kechikish (1000);
}
inputString = "";
stringComplete = noto'g'ri;
}
// kechikish (1000);
}
voidserialEvent () {
while (Serial.available ()) {
char inChar = (char) Serial.read ();
inputString += inChar;
agar (inChar == '\ n') {
stringComplete = rost;
}
kechikish (1);
}
}
voidclear () {
uchun (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, strip. Color (0, 0, 0));
}
}
voidshowTime () {
DateTime now = rtc.now ();
hourPixel = now.hour () % 12;
minutesPixel = (now.minute () / 5) % 12 + 12;
aniq ();
// strip.setPixelColor (hourPixel, strip. Color (40 + 40 * sath [hourPixel], 30 + 30 * level [hourPixel], 20 + 20 * level [hourPixel]));
// strip.setPixelColor (minutesPixel, strip. Color (40 + 40 * darajali [minutesPixel], 30 + 30 * darajali [minutesPixel], 20 + 20 * darajali [minutesPixel]));
strip.setPixelColor (hourPixel, strip. Color (sath [hourPixel], level [hourPixel], level [hourPixel]))));
strip.setPixelColor (minutesPixel, strip. Color (daraja [minutesPixel], daraja [minutesPixel], daraja [minutesPixel]))));
// lightUp (strip. Color (255, 255, 255));
strip.show ();
}
voidshowTime (int soat, int daqiqa) {
hourPixel = soat % 12;
minutesPixel = (daqiqa / 5) % 12 + 12;
aniq ();
// strip.setPixelColor (hourPixel, strip. Color (40 + 40 * sath [hourPixel], 30 + 30 * level [hourPixel], 20 + 20 * level [hourPixel]));
// strip.setPixelColor (minutesPixel, strip. Color (40 + 40 * darajali [minutesPixel], 30 + 30 * darajali [minutesPixel], 20 + 20 * darajali [minutesPixel]));
strip.setPixelColor (hourPixel, strip. Color (sath [hourPixel], level [hourPixel], level [hourPixel])));
strip.setPixelColor (daqiqaPixel, strip. Color (daraja [daqiqaPixel], daraja [daqiqaPixel], daraja [daqiqaPixel])));
// lightUp (strip. Color (255, 255, 255));
strip.show ();
}
voidlightUp (uint32_t rangi) {
uchun (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, rang);
}
strip.show ();
}
voidlightUpEven () {
uchun (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, strip. Color ( darajasi, darajasi, darajasi)));
}
strip.show ();
}

rawplywoodClock.ino ni GitHub ❤ tomonidan joylashtirilganini ko'ring

10 -qadam: Kompyuterni ko'rish - kalibrlash

Kompyuterni ko'rish - kalibrlash
Kompyuterni ko'rish - kalibrlash
Kompyuterni ko'rish - kalibrlash
Kompyuterni ko'rish - kalibrlash

Men bu loyihada shpon ishlatmaslikni ongli ravishda tanladim. Agar menda bo'lsa, yog'ochning qalinligi barcha LEDlar oldida bir xil bo'lardi. Lekin, chunki menda har bir LEDning oldida har xil qalinlikdagi yog'och bor va yog'och rangi ham turlicha bo'lgani uchun, har bir LED uchun LED yorqinligi har xil. Barcha LEDlar bir xil yorqinlikka ega bo'lishi uchun, men hiyla -nayrang o'ylab topdim.

Men soatni suratga oladigan va har bir LEDning yorqinligini tahlil qiladigan (GitHub -da) ishlov berish kodini yozdim. Keyin u har bir LEDning quvvatini o'zgartiradi, shunda ularning hammasi eng xira LED bilan bir xil yorqinlikka ega bo'ladi. Men bilaman, bu juda katta ish, lekin tasvirni qayta ishlash juda qiziq! Va men kutubxona sifatida kalibrlash kodini ishlab chiqishga umid qilaman.

Kalibrlashdan oldin va keyin LED yorqinligini yuqoridagi fotosuratlarda ko'rishingiz mumkin.

kalibrlashDispllay.pde

importprocessing.video.*;
importprocessing.serial.*;
Seriyali myPort;
Video yozib olish;
yakuniy son numLed = 24;
int ledNum = 0;
// PxPGetPixelDark () dan foydalanish uchun sizda global parametrlar bo'lishi kerak.
int rDark, gDark, bDark, aDark;
int rLed, gLed, bLed, aLed;
int rOrg, gOrg, bOrg, aOrg;
int rTemp, gTemp, bTemp, aTemp;
Bizning rasmimizni tasvirlash;
int runNumber = 0;
int acceptableError = 3;
int bajarildi;
int numPixelsInLed;
uzoq ledIntensivlik;
int ledPower;
uzoq targetIntensivlik = 99999999;
voidsetup () {
bajarilgan = newint [numLed];
numPixelsInLed = newint [numLed];
ledIntensity = newlong [numLed];
ledPower = newint [numLed];
uchun (int i = 0; i <numLed; i ++) {
ledPower = 255;
}
printArray (Serial.list ());
String portName = Serial.list () [31];
myPort = newSerial (bu, portName, 9600);
hajmi (640, 480);
video = newCapture (bu, kenglik, balandlik);
video.start ();
noStroke ();
silliq ();
kechikish (1000); // Seriya portining ochilishini kuting
}
voiddraw () {
agar (video.available ()) {
agar (bajarilgan [ledNum] == 0) {
clearDisplay ();
kechikish (1000);
video.read ();
tasvir (video, 0, 0, kenglik, balandlik); // Veb -kamera videosini ekranga torting
saveFrame ("ma'lumotlar/no_leds.jpg");
agar (runNumber! = 0) {
if ((ledIntensity [ledNum] - targetIntensity)*100/targetIntensity> məqbulError) {
ledPower [ledNum] -= pow (0,75, runNumber)*100+1;
}
agar ((targetIntensity - ledIntensity [ledNum])*100/targetIntensity> məqbulError) {
ledPower [ledNum] += pow (0,75, runNumber)*100 +1;
}
if (abs (targetIntensity - ledIntensity [ledNum])*100/targetIntensity <= qabul qilinadigan Xato) {
bajarilgan [ledNum] = 1;
bosib chiqarish ("Led");
bosib chiqarish (ledNum);
chop etish ("bajarilgan");
}
agar (ledPower [ledNum]> 255) {
ledPower [ledNum] = 255;
}
agar (ledPower [ledNum] <0) {
ledPower [ledNum] = 0;
}
}
setLedPower (ledNum, ledPower [ledNum]);
kechikish (1000);
video.read ();
tasvir (video, 0, 0, kenglik, balandlik); // Veb -kamera videosini ekranga torting
kechikish (10);
while (myPort.available ()> 0) {
int inByte = myPort.read ();
// chop etish (char (inByte));
}
String imageName = "ma'lumotlar/";
imageName+= str (ledNum);
imageName += "_ led.jpg";
saveFrame (imageName);
String originalImageName = "data/org";
originalImageName+= str (ledNum);
originalImageName += ". jpg";
agar (runNumber == 0) {
saveFrame (originalImageName);
}
PImage noLedImg = loadImage ("ma'lumotlar/no_leds.jpg");
PImage ledImg = loadImage (imageName);
PImage originalImg = loadImage (originalImageName);
noLedImg.loadPixels ();
ledImg.loadPixels ();
originalImg.loadPixels ();
fon (0);
yuklanish piksellari ();
led intensivligi [ledNum] = 0;
numPixelsInLed [ledNum] = 0;
uchun (int x = 0; x <kenglik; x ++) {
uchun (int y = 0; y <balandlik; y ++) {
PxPGetPixelDark (x, y, noLedImg.pixels, kenglik);
PxPGetPixelLed (x, y, ledImg.pixel, kenglik);
PxPGetPixelOrg (x, y, originalImg.pixel, kenglik);
agar ((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] ++;
} boshqa {
rTemp = 0;
gTemp = 0;
bTemp = 0;
}
PxPSetPixel (x, y, rTemp, gTemp, bTemp, 255, piksel, kenglik);
}
}
ledIntensity [ledNum] /= numPixelsInLed [ledNum];
if (targetIntensity> ledIntensity [ledNum] && runNumber == 0) {
targetIntensity = ledIntensity [ledNum];
}
updatePixels ();
}
bosib chiqarish (ledNum);
bosib chiqarish (',');
bosib chiqarish (ledPower [ledNum]);
bosib chiqarish (',');
println (ledIntensity [ledNum]);
ledNum ++;
agar (ledNum == numLed) {
int dozo = 0;
uchun (int i = 0; i <numLed; i ++) {
donezo += bajarilgan ;
}
agar (didzo == numLed) {
println ("BILDI");
uchun (int i = 0; i <numLed; i ++) {
chop etish (i);
bosib chiqarish ("\ t");
println (ledPower );
}
chop etish ("int level [");
bosib chiqarish (ledNum);
bosib chiqarish ("] = {");
uchun (int i = 0; i <numLed-1; i ++) {
bosib chiqarish (ledPower );
bosib chiqarish (',');
}
chop etish (ledPower [numLed -1]);
println ("};");
lightUpEven ();
while (rost);
}
chop etish ("Maqsad intensivligi:");
agar (runNumber == 0) {
targetIntensivlik -= 1;
}
println (targetIntensity);
ledNum = 0;
runNumber ++;
}
}
}
voidPxPGetPixelOrg (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelWidth]; // ranglarni piksel sifatida int sifatida olish
aOrg = (thisPixel >> 24) & 0xFF; // har bir komponentni yakka o'zi olish uchun biz siljishimiz va maskalashimiz kerak
rOrg = (thisPixel >> 16) & 0xFF; // bu qizil (), yashil (), ko'k () ni chaqirishdan ko'ra tezroq.
gOrg = (thisPixel >> 8) & 0xFF;
bOrg = thisPixel & 0xFF;
}
voidPxPGetPixelDark (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelWidth]; // ranglarni piksel sifatida int sifatida olish
aDark = (thisPixel >> 24) & 0xFF; // har bir komponentni yakka o'zi olish uchun biz siljishimiz va maskalashimiz kerak
rDark = (thisPixel >> 16) & 0xFF; // bu qizil (), yashil (), ko'k () ni chaqirishdan ko'ra tezroq.
gDark = (thisPixel >> 8) & 0xFF;
bDark = thisPixel & 0xFF;
}
voidPxPGetPixelLed (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelWidth]; // ranglarni piksel sifatida int sifatida olish
aLed = (thisPixel >> 24) & 0xFF; // biz har bir komponentni yakka o'zi olish uchun siljishimiz va niqoblashimiz kerak
rLed = (thisPixel >> 16) & 0xFF; // bu qizil (), yashil (), ko'k () ni chaqirishdan ko'ra tezroq.
gLed = (thisPixel >> 8) & 0xFF;
bLed = thisPixel & 0xFF;
}
voidPxPSetPixel (intx, inty, intr, intg, intb, inta, int pixelArray, intpixelsWidth) {
a = (a << 24);
r = r << 16; // Biz barcha 4 ta bastakorni bitta intga yig'amiz
g = g << 8; // shuning uchun biz ularni o'z joylariga ko'chirishimiz kerak
rang argb = a | r | g | b; // ikkilik "yoki" operatsiyasi ularning barchasini bitta int ga qo'shadi
pixelArray [x+y*pixelWidth] = argb; // nihoyat biz int rangini te rang bilan pikselga o'rnatdik
}

rawcalibrateDispllay.pde ni GitHub tomonidan ❤ bilan joylashtirilganini ko'rish

11 -qadam: ajralish haqida izohlar

Oldini olish uchun tuzoqlardan:

* Yog'och bilan siz to'lagan narsani olasiz. Shunday qilib, sifatli yog'ochni oling. Qayin kontrplak - yaxshi tanlov; har qanday engil qattiq yog'och ham yaxshi ishlaydi. Men o'tinni sotib oldim va qarorimdan afsuslandim.

* Kamroq burg'ilash yaxshidir. Bir nechta teshiklar mening qismim uchun juda chuqur ketdi. Va epoksi oldingi yuzada ko'rinadi. Buni sezganingizdan keyin juda seziladi.

* To'g'ridan -to'g'ri uchi emas, balki bilya uchli matkapdan foydalaning. Men to'pning uchi bilan tajriba o'tkazmadim, lekin ishonchim komilki, natijalar ancha yaxshi bo'ladi.

Men ularni Etsy yoki tindida sotish fikri bilan noz -karashma qilyapman. Agar siz buni mantiqiy deb hisoblasangiz, quyida sharh bersangiz juda minnatdorman:)

Tavsiya: