Модон LED цаг - Аналог хэв маяг: 11 алхам (зурагтай)
Модон LED цаг - Аналог хэв маяг: 11 алхам (зурагтай)
Anonim
Модон LED цаг - Аналог хэв маяг
Модон LED цаг - Аналог хэв маяг

Энэ бол аналог загварын модон LED цаг юм. Яагаад эдгээрийн нэгийг нь өмнө нь харж байгаагүй юм бол бүү мэд.. дижитал төрлүүд маш түгээмэл байдаг. Ямар ч байсан, бид явцгаая!

1-р алхам:

Зураг
Зураг
Зураг
Зураг

Фанер цагны төсөл нь CNC чиглүүлэгчийн энгийн гарааны төслөөр эхэлсэн. Би онлайнаар энгийн төслүүдийг үзэж байгаад энэ чийдэнг олсон (дээрх зураг). Би бас модон өнгөлгөөөөр гэрэлтдэг дижитал цагийг харсан (дээрх зураг). Тиймээс хоёр төслийг нэгтгэх нь ойлгомжтой санаа байв. Өөрийгөө сорихыг хүсч байгаа тул би энэ төсөлд өнгөлгөө хийхгүй, зөвхөн мод ашиглахаар шийдсэн.

Алхам 2: Дизайн

Дизайн
Дизайн
Дизайн
Дизайн

Би Inkscape дээр цаг зохион бүтээсэн (дээрх зураг). Дизайн нь сонголтоороо маш энгийн. Утасны ул мөрийг чиглүүлэхгүй байхаар шийдсэн, учир нь энэ үед би радиаль эсвэл периметрийн утсаар явахыг хүсч байгаагаа мэдэхгүй байсан. (Би эцэст нь периметрийн утастай холбохоор шийдсэн.) Нэг дугуйны нүх тус бүрт нэг минутанд, нэг цагт таван минутын нарийвчлалтайгаар харуулах нэг непиксел ордог. Цахилгаан хэрэгслийг байрлуулахын тулд дунд хэсэгт байгаа тойргийг гадагшлуулах болно.

Алхам 3: CNCing

CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing

Би MasterCAM дээр багажны замыг зохион бүтээсэн бөгөөд 3/4 инчийн фанераас цаг гаргаж авахын тулд technoRouter ашигласан. Үүний тулд би 15 "x15" ширхэгийг хамгийн бага үрэлттэй ашигладаг. Заль мэх нь модыг хагалахгүйгээр аль болох их хэмжээгээр гадагш гаргах явдал юм. 0.05 "-0.1" үлдээх нь хөнгөн модны хувьд сайн сонголт юм. Хэрэв та итгэлгүй байгаа бол илүү их мод үлдээх нь дээр, учир нь та үргэлж нөгөө нүүрээ зүлгэж болно. Би зарим хэсгээс хэт их мод авч хаясан боловч аз болоход үр дүн нь тийм ч их зовдоггүй.

CNC нэвтрэх эрхгүй хэрэглэгчдэд зориулсан тэмдэглэл:

Энэ төслийг өрмийн машин ашиглан хялбархан хийж болно. Суурь дээр 0.1 орчим мод үлдэх цэг дээр та зогсоолоо тавих хэрэгтэй. Та нарийвчлалтай байх ёстой, гэхдээ тийм ч нарийн биш. Эцсийн эцэст, бүх LED гэрэл асахыг хэн ч харахгүй. Үүний зэрэгцээ та бага зэрэг налуугаар зугтаж чадна.

Алхам 4: Электроник

Электроник
Электроник
Электроник
Электроник
Электроник
Электроник

Цахилгаан хэрэгсэл нь маш энгийн. 24 неопиксел байдаг бөгөөд цагийг харуулах арван хоёр, минутыг харуулах арван хоёр, таван минутын нарийвчлалтай. Arduino pro mini нь неопикселийг хянадаг бөгөөд DS3231 бодит цагийн цаг (RTC) модулийг ашиглан цагийг зөв авдаг. RTC модуль нь зоосны үүртэй тул нөөцөө унтраасан ч цаг алдахгүй.

Материал:

Arduino pro mini (эсвэл өөр бусад Arduino)

DS3231 таслах самбар

Хуванцар хавтангууд дахь неопикселүүд

Алхам 5: Электроникийн угсралт

Электроникийн угсралт
Электроникийн угсралт
Электроникийн угсралт
Электроникийн угсралт
Электроникийн угсралт
Электроникийн угсралт
Электроникийн угсралт
Электроникийн угсралт

Би неопикселүүдийг утсаар холбосон бөгөөд эхний арван хоёр гэрэлд 2.5 инчийн утас, дараагийн арван хоёрт дөрвөн инчийн утас ашиглав. Би арай бага утасны уртыг ашиглаж болох байсан. Мөрийг хийсний дараа би үүнийг туршиж үзээд гагнуур байгаа эсэхийг шалгасан. үе сайн байсан. Би бүх ледийг асаахын тулд түр зуурын унтраалга нэмсэн.

Алхам 6: Хуурай гүйлт

Хуурай гүйлт
Хуурай гүйлт
Хуурай гүйлт
Хуурай гүйлт
Хуурай гүйлт
Хуурай гүйлт
Хуурай гүйлт
Хуурай гүйлт

Туршилт хийж, LED -ийг нүхэнд хийж, бүгдийг нь асаасны дараа би үр дүнд сэтгэл хангалуун байсан. Тиймээс би урд талын нүүрээ бага зэрэг зүлгэж, PU пальто түрхэв. Хожим нь би пальтог өнгөлж дуусгасан боловч гоо сайхны хувьд тааламжгүй санагдвал үлдээсэн нь дээр.

Алхам 7: Эпокси

Эпокси
Эпокси
Эпокси
Эпокси

Цооног доторх удирдсан байрлалыг туршиж үзсэний дараа LED нь нүхний үзүүрээс 0.2 инч орчим зайтай байх үед хамгийн сайн хэлэлцүүлгийг хийх болно гэж би ойлгосон. Та өөрөө үүнийг туршиж үзэхэд LED -ийн гэрэл нь өөр байх болно. нүх тус бүр. Энэ талаар санаа зовох хэрэггүй, бид үүнийг кодоор засах болно. Энэ нь миний ашиглаж байсан өрмийн хэлбэртэй холбоотой юм. Хэрэв би үүнийг дахин хийх юм бол би цооногуудад бөмбөгний өрөмдлөг ашиглах болно. Гэхдээ ямар ч тохиолдолд зайг олж авахын тулд би эпокси хольж, нүх тус бүрт бага зэрэг хийнэ.

Алхам 8: Бүгдийг нэгтгэх

Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах

LED-ийг 12 цагийн зүүний байрлалаас эхлэн цагийн зүүний эсрэг бүх цагийн зүүний дагуу, дараа нь минутын гарт шилжүүлж, 60 минутын тэмдгээс цагийн зүүний эсрэг хөдөлнө. Ингэснээр бид урд талаас нь харахад LED загвар нь цагийн зүүний дагуу явж байна.

Эпокси нэг цагийн турш хатуурсны дараа би эпокси түрхэв. Энэ удаад би LED -ийг нүхэнд хийж, утас, гагнуурын үеийг эпокси ашиглан битүүмжилсэн. Энэ нь гэрлийн сайн тархалтыг бий болгож, утсыг найдвартай хамгаална.

Алхам 9: Код

Код
Код

Код нь GitHub дээр байгаа тул үүнийг ашиглахын тулд өөрчилж болно. Хэрэв та бүх LED -ийг ижил түвшинд асаахад нүх тус бүрт гэрэлтэх гэрлийн гэрэл маш өөр байх болно. Энэ нь нүхэнд байгаа модны зузаан, модны сүүдэрт ялгаатай байдлаас үүдэлтэй юм. Таны харж байгаагаар модны өнгө миний хэсэгт нэлээд өөр байдаг. Гэрэлт байдлын ялгааг арилгахын тулд би гэрэлтүүлгийн түвшний матриц хийсэн. Мөн илүү тод LED -ийн гэрлийг бууруулсан. Энэ бол туршилт, алдааны процесс бөгөөд хэдэн минут шаардагдах боловч үр дүн нь үнэ цэнэтэй юм.

plywoodClock.ino

// фанер цаг
// Зохиогч: tinkrmind
// Олон улсын Attribution 4.0 (CC BY 4.0). Та чөлөөтэй:
// Хуваалцах - материалыг ямар ч орчин, хэлбэрээр хуулж, дахин тараах
// Дасан зохицох - материалыг ямар ч зориулалтаар, тэр байтугай арилжааны зориулалтаар remix хийх, өөрчлөх, бүтээх.
// Ура!
#оруулах
#"RTClib.h" -ийг оруулна уу
RTC_DS3231 rtc;
#"Adafruit_NeoPixel.h" -ийг оруулаарай
#ifdef _АВР_
#оруулах
#endif
#тодорхойлохPIN6
Adafruit_NeoPixel зурвас = Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800);
int hourPixel = 0;
int минутPixel = 0;
unsignedlong lastRtcCheck;
String inputString = ""; // ирж буй өгөгдлийг хадгалах тэмдэгт мөр
boolean stringComplete = худал; // мөр дууссан эсэх
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
байхад (! Цуваа); // Леонардо/Микро/Тэгийн хувьд
#endif
// Энэ нь Trinket 5V 16MHz -д зориулагдсан бөгөөд хэрэв та Trinket ашиглаагүй бол эдгээр гурван мөрийг арилгах боломжтой.
#тодорхойлсон бол (_AVR_ATtiny85_)
хэрэв (F_CPU == 16000000) clock_prescale_set (clock_div_1);
#endif
// trinket тусгай кодын төгсгөл
Цуваа эхлэх (9600);
strip.begin ();
strip.show (); // Бүх пикселийг "унтраах" болгож эхлүүлэх
хэрэв (! rtc.begin ()) {
Serial.println ("RTC олж чадсангүй");
байхад (1);
}
pinMode (2, INPUT_PULLUP);
// rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)))));
if (rtc.lostPower ()) {
Serial.println ("RTC хүчээ алдсан, цагийг тохируулцгаая!");
// Дараах мөр нь RTC -ийг энэхүү ноорог эмхэтгэсэн огноо, цагт тохируулна
rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_)))));
// Энэ мөр нь RTC -ийг тодорхой огноо, цаг, жишээлбэл тохируулахаар тохируулдаг
// 2014 оны 1 -р сарын 21 -ний 3 цагт та дараахь утсаар ярих болно.
// rtc.adjust (DateTime (2017, 11, 06, 2, 49, 0));
}
// rtc.adjust (DateTime (2017, 11, 06, 2, 49, 0));
// lightUpEven ();
// байхад (1);
lastRtcCheck = 0;
}
voidloop () {
if (millis () - lastRtcCheck> 2000) {
DateTime now = rtc.now ();
Цуваа.хэвлэх (одоо.цаг (), DEC);
Serial.print (':');
Serial.print (now.minute (), DEC);
Serial.print (':');
Serial.print (одоо.second (), DEC);
Serial.println ();
showTime ();
lastRtcCheck = millis ();
}
if (! digitalRead (2)) {
lightUpEven ();
}
if (stringComplete) {
Serial.println (inputString);
if (inputString [0] == 'l') {
Serial.println ("Түвшин");
lightUpEven ();
}
if (inputString [0] == 'c') {
Serial.println ("Цагийг харуулах");
showTime ();
strip.show ();
}
if (inputString [0] == '1') {
Serial.println ("Бүх LED -ийг асаах");
lightUp (зурвас Өнгө (255, 255, 255));
strip.show ();
}
if (inputString [0] == '0') {
Serial.println ("Цэвэрлэх зурвас");
тодорхой ();
strip.show ();
}
// #3, 255 нь 3 -р дугаарыг 255, 255, 255 -р түвшинд тохируулна
if (inputString [0] == '#') {
Утасны температур;
temp = inputString.substring (1);
int pixNum = temp.toInt ();
temp = inputString.substring (inputString.indexOf (',') + 1);
int эрчим = temp.toInt ();
Serial.print ("Тохиргоо");
Цуваа.хэвлэх (pixNum);
Serial.print ("түвшинд");
Serial.println (эрч хүч);
strip.setPixelColor (pixNum, зурвас Өнгө (эрч хүч, эрч хүч, эрч хүч));
strip.show ();
}
// #3, 255, 0, 125 нь 3 -р дугаарыг 255, 0, 125 -р түвшинд тохируулна
if (inputString [0] == '$') {
Утасны температур;
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 ("Тохиргоо");
Цуваа.хэвлэх (pixNum);
Serial.print ("R to");
Цуваа.хэвлэх (rIntensity);
Serial.print ("G to");
Цуваа.хэвлэх (gIntensity);
Serial.print ("B to");
Serial.println (bIntensity);
strip.setPixelColor (pixNum, strip. Color (rIntensity, gIntensity, bIntensity));
strip.show ();
}
if (inputString [0] == 's)) {
Утасны температур;
int цаг, минут;
temp = inputString.substring (1);
цаг = temp.toInt ();
int rIndex = inputString.indexOf (',') + 1;
temp = inputString.substring (rIndex);
минут = temp.toInt ();
Serial.print ("Цагийг харуулах:");
Цуврал хэвлэх (цаг);
Serial.print (":");
Цуваа.хэвлэх (минут);
showTime (цаг, минут);
саатал (1000);
}
inputString = "";
stringComplete = худал;
}
// саатал (1000);
}
voidserialEvent () {
while (Serial.available ()) {
char inChar = (char) Serial.read ();
inputString += inChar;
хэрэв (inChar == '\ n') {
stringComplete = үнэн;
}
саатал (1);
}
}
voidclear () {
for (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;
тодорхой ();
// strip.setPixelColor (hourPixel, strip. Color (40 + 40 * түвшин [hourPixel], 30 + 30 * түвшин [hourPixel], 20 + 20 * түвшин [hourPixel]));
// strip.setPixelColor (минутPixel, strip. Color (40 + 40 * түвшин [минутПиксел], 30 + 30 * түвшин [минутПиксел], 20 + 20 * түвшин [минутПиксел]));
strip.setPixelColor (hourPixel, strip. Color (түвшин [hourPixel], түвшин [hourPixel], түвшин [hourPixel]))));
strip.setPixelColor (минутPixel, зураас Өнгө (түвшин [минутPixel], түвшин [минутPixel], түвшин [минутPixel])));
// lightUp (зурвас. Өнгө (255, 255, 255));
strip.show ();
}
voidshowTime (int цаг, int минут) {
hourPixel = цаг % 12;
минутPixel = (минут / 5) % 12 + 12;
тодорхой ();
// strip.setPixelColor (hourPixel, strip. Color (40 + 40 * түвшин [hourPixel], 30 + 30 * түвшин [hourPixel], 20 + 20 * түвшин [hourPixel]));
// strip.setPixelColor (минутPixel, strip. Color (40 + 40 * түвшин [минутПиксел], 30 + 30 * түвшин [минутПиксел], 20 + 20 * түвшин [минутПиксел]));
strip.setPixelColor (hourPixel, strip. Color (түвшин [hourPixel], түвшин [hourPixel], түвшин [hourPixel])));
strip.setPixelColor (минутPixel, зураас Өнгө (түвшин [минутPixel], түвшин [минутPixel], түвшин [минутPixel])));
// lightUp (зурвас. Өнгө (255, 255, 255));
strip.show ();
}
voidlightUp (uint32_t өнгө) {
for (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, өнгө);
}
strip.show ();
}
voidlightUpEven () {
for (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, strip. Color (түвшин , түвшин , түвшин )));
}
strip.show ();
}

GitHub -аас ❤ зохион байгуулсан rawplywoodClock.ino -г үзэх

Алхам 10: Компьютерийн хараа - шалгалт тохируулга

Компьютерийн хараа - шалгалт тохируулга
Компьютерийн хараа - шалгалт тохируулга
Компьютерийн хараа - шалгалт тохируулга
Компьютерийн хараа - шалгалт тохируулга

Би энэ төсөлд өнгөлгөө хийхгүй байх талаар ухамсартай сонголт хийсэн. Хэрэв би байсан бол бүх LED -ийн өмнө модны зузаан ижил байх байсан. Гэхдээ би LED бүрийн урд модны зузаан өөр өөр байдаг тул модны өнгө маш их ялгаатай байдаг тул LED гэрэл тус бүрийн хувьд өөр өөр байдаг. Бүх LED нь ижил гэрэлтүүлэгтэй байхын тулд би нэг заль мэх зохион бүтээсэн.

Би цагны зургийг авдаг зарим боловсруулалтын кодыг (GitHub дээр) бичээд LED тус бүрийн гэрлийг тус тусад нь шинжилдэг. Дараа нь LED тус бүрийн хүчийг өөрчилж, бүгдийг нь хамгийн бүдэг LED шиг гэрэлтүүлэхийг хичээдэг. Энэ бол хэт их ажил гэдгийг би одоо мэдэж байна, гэхдээ зураг боловсруулах нь маш хөгжилтэй юм! Мөн шалгалт тохируулгын кодыг номын сан болгон хөгжүүлнэ гэж найдаж байна.

Та дээрх гэрэл зургуудаас калибровк хийхээс өмнө болон дараа нь LED гэрлийг харж болно.

CalibrateDispllay.pde

importprocessing.video.*;
importprocessing.serial.*;
Цуваа myPort;
Видео бичлэг хийх;
finalint numLed = 24;
int ledNum = 0;
// та PxPGetPixelDark () -ийг ашиглахын тулд эдгээр глобал хувьсагчтай байх ёстой.
int rDark, gDark, bDark, aDark;
int rLed, gLed, bLed, aLed;
int rOrg, gOrg, bOrg, aOrg;
int rTemp, gTemp, bTemp, aTemp;
PI манай дүрсийг дүрслэх;
int runNumber = 0;
int acceptableError = 3;
int хийсэн;
int numPixelsInLed;
урт ledIntensity;
int ledPower;
урт targetIntensity = 99999999;
voidsetup () {
хийсэн = newint [numLed];
numPixelsInLed = newint [numLed];
ledIntensity = шинэ урт [numLed];
ledPower = newint [numLed];
for (int i = 0; i <numLed; i ++) {
ledPower = 255;
}
printArray (Serial.list ());
String portName = Serial.list () [31];
myPort = newSerial (энэ, portName, 9600);
хэмжээ (640, 480);
видео = newCapture (энэ, өргөн, өндөр);
video.start ();
цус харвалтгүй ();
гөлгөр ();
саатал (1000); // Цуваа порт нээгдэхийг хүлээнэ үү
}
voiddraw () {
if (video.available ()) {
хэрэв (хийсэн [ledNum] == 0) {
clearDisplay ();
саатал (1000);
video.read ();
зураг (видео, 0, 0, өргөн, өндөр); // Вэбкамерын видеог дэлгэцэн дээр зур
saveFrame ("өгөгдөл/no_leds.jpg");
if (runNumber! = 0) {
if ((ledIntensity [ledNum] - targetIntensity)*100/targetIntensity> acceptableError) {
ledPower [ledNum] -= pow (0.75, runNumber)*100+1;
}
if ((targetIntensity - ledIntensity [ledNum])*100/targetIntensity> acceptableError) {
ledPower [ledNum] += pow (0.75, runNumber)*100 +1;
}
if (abs (targetIntensity - ledIntensity [ledNum])*100/targetIntensity <= хүлээн зөвшөөрөгдөх Алдаа) {
хийсэн [ledNum] = 1;
хэвлэх ("Led");
хэвлэх (ledNum);
хэвлэх ("хийсэн");
}
хэрэв (ledPower [ledNum]> 255) {
ledPower [ledNum] = 255;
}
if (ledPower [ledNum] <0) {
ledPower [ledNum] = 0;
}
}
setLedPower (ledNum, ledPower [ledNum]);
саатал (1000);
video.read ();
зураг (видео, 0, 0, өргөн, өндөр); // Вэбкамерын видеог дэлгэцэн дээр зур
саатал (10);
байхад (myPort.available ()> 0) {
int inByte = myPort.read ();
// хэвлэх (char (inByte));
}
String imageName = "өгөгдөл/";
imageName+= str (ledNum);
imageName += "_ led.jpg";
saveFrame (imageName);
String originalImageName = "data/org";
originalImageName+= str (ledNum);
originalImageName += ". jpg";
хэрэв (runNumber == 0) {
saveFrame (originalImageName);
}
PImage noLedImg = loadImage ("data/no_leds.jpg");
PImage ledImg = loadImage (imageName);
PImage originalImg = loadImage (originalImageName);
noLedImg.loadPixels ();
ledImg.loadPixels ();
originalImg.loadPixels ();
дэвсгэр (0);
loadPixels ();
ledIntensity [ledNum] = 0;
numPixelsInLed [ledNum] = 0;
for (int x = 0; x <width; x ++) {
for (int y = 0; y <өндөр; y ++) {
PxPGetPixelDark (x, y, noLedImg.pixels, width);
PxPGetPixelLed (x, y, ledImg.pixels, width);
PxPGetPixelOrg (x, y, originalImg.pixels, width);
хэрэв ((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] ++;
} өөр {
rTemp = 0;
gTemp = 0;
bTemp = 0;
}
PxPSetPixel (x, y, rTemp, gTemp, bTemp, 255, пиксел, өргөн);
}
}
ledIntensity [ledNum] /= numPixelsInLed [ledNum];
if (targetIntensity> ledIntensity [ledNum] && runNumber == 0) {
targetIntensity = ledIntensity [ledNum];
}
updatePixels ();
}
хэвлэх (ledNum);
хэвлэх (',');
хэвлэх (ledPower [ledNum]);
хэвлэх (',');
println (ledIntensity [ledNum]);
ledNum ++;
хэрэв (ledNum == numLed) {
int dozo = 0;
for (int i = 0; i <numLed; i ++) {
donezo += хийсэн ;
}
хэрэв (dozo == numLed) {
println ("БҮТЭЭГДЭХ");
for (int i = 0; i <numLed; i ++) {
хэвлэх (i);
хэвлэх ("\ t");
println (ledPower );
}
хэвлэх ("int level [");
хэвлэх (ledNum);
хэвлэх ("] = {");
for (int i = 0; i <numLed-1; i ++) {
хэвлэх (ledPower );
хэвлэх (',');
}
хэвлэх (ledPower [numLed -1]);
println ("};");
lightUpEven ();
байхад (үнэн);
}
хэвлэх ("Зорилтот эрч хүч:");
хэрэв (runNumber == 0) {
targetIntensity -= 1;
}
println (targetIntensity);
ledNum = 0;
runNumber ++;
}
}
}
voidPxPGetPixelOrg (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pikselWidth]; // пикселээс өнгийг int болгон авах
aOrg = (thisPixel >> 24) & 0xFF; // бүрэлдэхүүн хэсэг бүрийг дангаар нь авахын тулд бид шилжиж, маск хийх хэрэгтэй
rOrg = (thisPixel >> 16) & 0xFF; // энэ нь улаан (), ногоон (), цэнхэр () гэж дуудахаас хурдан юм
gOrg = (thisPixel >> 8) & 0xFF;
bOrg = thisPixel & 0xFF;
}
voidPxPGetPixelDark (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pikselWidth]; // пикселээс өнгийг int болгон авах
aDark = (thisPixel >> 24) & 0xFF; // бүрэлдэхүүн хэсэг бүрийг дангаар нь авахын тулд бид шилжиж, маск хийх хэрэгтэй
rDark = (thisPixel >> 16) & 0xFF; // энэ нь улаан (), ногоон (), цэнхэр () гэж дуудахаас хурдан юм
gDark = (thisPixel >> 8) & 0xFF;
bDark = thisPixel & 0xFF;
}
voidPxPGetPixelLed (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pikselWidth]; // пикселээс өнгийг int болгон авах
aLed = (thisPixel >> 24) & 0xFF; // бүрэлдэхүүн хэсэг бүрийг дангаар нь авахын тулд бид шилжиж, маск хийх хэрэгтэй
rLed = (thisPixel >> 16) & 0xFF; // энэ нь улаан (), ногоон (), цэнхэр () гэж дуудахаас хурдан юм
gLed = (thisPixel >> 8) & 0xFF;
bLed = thisPixel & 0xFF;
}
voidPxPSetPixel (intx, inty, intr, intg, intb, inta, int pixelArray, intpixelsWidth) {
a = (a << 24);
r = r << 16; // Бид бүх 4 хөгжмийн зохиолчдыг нэг int болгон багтааж байна
g = g << 8; // тиймээс бид тэднийг байрандаа шилжүүлэх хэрэгтэй
өнгө argb = a | r | g | б; // хоёртын "эсвэл" үйлдэл нь бүгдийг нэг int болгон нэмдэг
pixelArray [x+y*pikselWidth] = argb; // Эцэст нь бид int -ийг te өнгөөр пиксел болгон тохируулав
}

GitHub -аас ❤ дээр зохион байгуулагдсан rawcalibrateDispllay.pde -г үзэх

Алхам 11: Салах тухай тайлбар

Урьдчилан сэргийлэх ёстой бэрхшээлүүд:

* Модоор та төлсөн мөнгөө авна. Тиймээс сайн чанарын мод аваарай. Хусан фанер бол сайн сонголт юм; ямар ч хөнгөн хатуу мод бас сайн хийх болно. Би модон дээр хямд үнээр зарагдаж, гаргасан шийдвэртээ харамсав.

* Илүү их өрөмдлөг хийх нь дээр. Хэд хэдэн нүх миний бүтээлд хэтэрхий гүн орсон. Мөн эпокси нь нүүрэн дээр харагдаж байна. Үүнийг анзаарсны дараа маш их мэдэгдэх болно.

* Шулуун төгсгөлийн оронд бөмбөгний төгсгөлийн өрөмдлөг ашиглана уу. Би бөмбөгний төгсгөлийг туршиж үзээгүй боловч үр дүн нь хамаагүй дээр байх болно гэдэгт итгэлтэй байна.

Би үүнийг Etsy эсвэл tindie дээр зарах санаатай сээтэгнэж байна. Хэрэв та үүнийг утга учиртай гэж бодож байвал доор сэтгэгдэл бичих боломжтой бол би үнэхээр талархах болно:)

Зөвлөмж болгож буй: