Мазмуну:

Жыгач LED саат - Аналогдук стиль: 11 кадам (Сүрөттөр менен)
Жыгач LED саат - Аналогдук стиль: 11 кадам (Сүрөттөр менен)

Video: Жыгач LED саат - Аналогдук стиль: 11 кадам (Сүрөттөр менен)

Video: Жыгач LED саат - Аналогдук стиль: 11 кадам (Сүрөттөр менен)
Video: Часы G-Shock до 250 долларов-15 лучших часов Casio G до 250 доллар... 2024, Июль
Anonim
Жыгачтан жасалган LED саат - аналогдук стиль
Жыгачтан жасалган LED саат - аналогдук стиль

Бул аналогдук стилдеги жыгачтан жасалган LED саат. Билбейм, эмне үчүн мен буга чейин алардын бирин көргөн эмесмин.. санарип түрлөрү өтө кеңири таралган болсо да. Anyhoo, мына кеттик!

1 кадам:

Сүрөт
Сүрөт
Сүрөт
Сүрөт

Фанердик саат проекти CNC роутери үчүн жөнөкөй баштоочу долбоор катары башталган. Мен интернетте жөнөкөй долбоорлорду карап жатып, бул чыракты таптым (жогорудагы сүрөт). Мен дагы жыгач каптоо аркылуу жаркыраган санарип сааттарды көргөм (жогорудагы сүрөт). Ошентип, эки долбоорду бириктирүү ачык идея болчу. Өзүмдү сынап көргүм келип, бул долбоор үчүн шпонду эмес, жыгачтын бир бөлүгүн колдонууну чечтим.

2 -кадам: Дизайн

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

Мен саатты Inkscapeте иштеп чыккам (үстүндөгү сүрөт). Дизайн тандоо боюнча абдан жөнөкөй. Мен зымдарды издөөнү токтотууну чечтим, анткени бул учурда радиалдуу же периметрдик зымдар менен баргым келгенине ишенбедим. (Мен акыры периметр зымдары менен барууну чечтим.) Бир неопиксел кичинекей тегерек тешиктердин ар бирине кирип, беш мүнөттүк тактык менен мүнөт менен саатты көрсөтөт. Ортодогу тегерек электрониканы жайгаштыруу үчүн чыгарылат.

3 -кадам: CNCing

CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing
CNCing

Мен MasterCAM боюнча курама жолдорду иштеп чыктым жана 3/4 дюймдук фанерадан саатты тегирмендөө үчүн техноРоутер колдондум. Мен бул үчүн 15 "x15" бөлүгүн колдоном, минималдуу ысырапкорчулук менен. Айла - жыгачты сындырбай, мүмкүн болушунча көп жыгачты сыртка чыгаруу. 0.05 "-0.1" калтыруу жеңил жыгач үчүн жакшы чечим. Эгер ишенбесеңиз, жыгачты көбүрөөк калтырганыңыз оң, анткени ар дайым башка жүзүңүздү кумдай аласыз. Мен кээ бир бөлүктөрдөн бир аз ашыкча жыгачты алып салдым, бирок, бактыга жараша, жыйынтыгы ушунчалык көп кыйналбайт.

CNCге кире албаган колдонуучулар үчүн эскертүү:

Бул долбоорду бургулоочу пресс менен оңой эле жасаса болот. Сиз жөн гана токтоочу жайдын тегерегинде 0,1 дюйм калган жерди белгилешиңиз керек. Сиз так болушуңуз керек, бирок өтө так эмес. Кантсе да, эч ким бардык светодиоддордун күйүп турганын көрбөйт. ошол эле учурда, андыктан бир аз кыйшайып кете аласыз.

4 -кадам: Электроника

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

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

Материал:

Arduino pro mini (же бул үчүн башка Arduino)

DS3231 үзүлүү тактасы

Жеке сынык такталарында неопикселдер

5 -кадам: Электрондук Ассамблея

Электроника Ассамблеясы
Электроника Ассамблеясы
Электроника Ассамблеясы
Электроника Ассамблеясы
Электроника Ассамблеясы
Электроника Ассамблеясы
Электроника Ассамблеясы
Электроника Ассамблеясы

Мен неопикселдерди жипке туташтырдым, биринчи он эки лед үчүн 2,5 дюймдук зымдарды жана кийинки он эки үчүн төрт дюймдук зымдарды колдончумун. Мен кичине кичине зым узундуктарын колдоно алмакмын. Жипти жасагандан кийин мен аны сынап көрдүм. муундар жакшы болчу. Мен бардык леддерди күйгүзүү үчүн бир аздан кийин кошуу үчүн, жөн гана көрсөтүү үчүн.

6 -кадам: Кургак чуркоо

Dry Run
Dry Run
Dry Run
Dry Run
Dry Run
Dry Run
Dry Run
Dry Run

Эксперимент кылып, тешиктерге диоддорду коюп, баарын күйгүзгөндөн кийин, мен жыйынтыгына канааттандым. Ошентип, мен алдыңкы бетин бир аз сүртүп, ПУ пальто сүйкөдүм. Мен кийинчерээк пальтону сүртүп бүтүрдүм, бирок эстетикалык жактан жакпаса, аны калтыруу жакшы.

7 -кадам: Эпоксид

Epoxy
Epoxy
Epoxy
Epoxy

Тешиктердин ичиндеги жетектөөчү позиция менен бир аз тестирлөөдөн кийин, мен эң жакшы талкууга LED диаметри тешиктин аягынан 0,2 тегерегинде болгондо жетишилет деп ойлодум. Муну өзүңүз сынап көргөнүңүздө, диоддордун жарыгы ар кандай болот. ар бир тешик. Бул жөнүндө кабатыр болбоңуз; биз аны код менен оңдойбуз. Бул мен колдонгон бургулоочу битке байланыштуу. Эгерде мен дагы бир жолу мындай кылсам, тешиктер үчүн шариктүү бургулоочу учту колдонмокмун Бирок, кандай болгон күндө да, аралыкты алуу үчүн эпоксидин аралаштырып, ар бир тешикке бир аз салып койдум.

8 -кадам: Бардыгын бириктирүү

Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу
Баарын бир жерге коюу

Светодиоддор сааттын жебеси боюнча сааттын жебесине каршы, сааттын жебесинин бардык позициялары боюнча сааттын жебесине каршы, андан кийин 60 мүнөттүк саатка каршы жылып, кайра сааттын жебесине каршы жылат. Бул биз алдыдан караганыбызда, LED үлгүсү саат жебеси боюнча баратат.

Эпоксид бир саат айыккандан кийин, мен дагы бир аз эпоксидин салдым. Бул жолу мен светодиоддорду жана эпоксид менен бириктирилген муундарды жабууну тактап, диоддорду тешиктерге койдум. Бул жарыктын жакшы таралышын камсыз кылат жана зымдарды бекемдейт.

9 -кадам: Код

Code
Code

Код GitHubда, аны колдонуу үчүн өзгөртүүдөн тартынбаңыз. Бардык LED диоддорун бирдей деңгээлге которгондо, ар бир тешикте жарыктын жарыгы ар кандай болот. Бул тешиктердеги жыгачтын калыңдыгы жана жыгачтын көлөкөсүндөгү айырмачылыктан улам болот, Көрүнүп тургандай, жыгачтын түсү менин кесимимде бир аз өзгөрөт. Жарыктагы бул айырмачылыкты жоюу үчүн, мен жарыктыктын деңгээлдеринин матрицасын түздүм. Жана жарык диоддордун жарыктыгы төмөндөдү. Бул сыноо жана ката процесси жана бир нече мүнөткө созулушу мүмкүн, бирок натыйжалары татыктуу.

plywoodClock.ino

// Фанердик саат
// Автор: tinkrmind
// Attribution 4.0 International (CC BY 4.0). Сиз эркинсиз:
// Бөлүшүү - материалды каалаган чөйрөдө же форматта көчүрүү жана кайра бөлүштүрүү
// Ыңгайлаштыруу - ремикс, трансформациялоо жана материалды каалаган максатта, атүгүл коммерциялык жактан.
// Ура!
#кошуу
#"RTClib.h" кошуу
RTC_DS3231 rtc;
#"Adafruit_NeoPixel.h" кошуу
#ifdef _AVR_
#кошуу
#endif
#definePIN6
Adafruit_NeoPixel тилкеси = Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800);
int hourPixel = 0;
int minutesPixel = 0;
unsignedlong lastRtcCheck;
String inputString = ""; // келген маалыматтарды сактоо үчүн сап
логикалык stringComplete = false; // сап бүткөнбү
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
while (! Сериялык); // Леонардо/Микро/Нөл үчүн
#endif
// Бул Trinket 5V 16MHz үчүн, эгер сиз Trinket колдонбосоңуз, анда бул үч сапты алып салсаңыз болот
#аныкталган болсо (_AVR_ATtiny85_)
эгер (F_CPU == 16000000) clock_prescale_set (clock_div_1);
#endif
// Сыйкырдын атайын кодунун аягы
Serial.begin (9600);
strip.begin ();
strip.show (); // Бардык пикселдерди "өчүрүү" үчүн баштоо
if (! rtc.begin ()) {
Serial.println ("RTC табылган жок");
while (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_))));
// Бул линия РТТны ачык датасы жана убактысы менен коет, мисалы коюу үчүн
// 21 -январь, 2014 -ж., Түнкү саат 3тө, сиз төмөнкү телефондорго чаласыз:
// 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 now = rtc.now ();
Serial.print (now.hour (), DEC);
Serial.print (':');
Serial.print (now.minute (), DEC);
Serial.print (':');
Serial.print (now.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 (strip. Color (255, 255, 255));
strip.show ();
}
if (inputString [0] == '0') {
Serial.println ("Тазалоочу тилке");
ачык ();
strip.show ();
}
// #3, 255 3 -көрсөткүчтү 255, 255, 255 -деңгээлге коймок
if (inputString [0] == '#') {
String temp;
темп = inputString.substring (1);
int pixNum = temp.toInt ();
темп = inputString.substring (inputString.indexOf (',') + 1);
int күчү = temp.toInt ();
Serial.print ("Орнотуу");
Serial.print (pixNum);
Serial.print ("деңгээлге");
Serial.println (интенсивдүүлүк);
strip.setPixelColor (pixNum, strip. Color (интенсивдүүлүк, интенсивдүүлүк, интенсивдүүлүк));
strip.show ();
}
// #3, 255, 0, 125 3 -көрсөткүчтү 255, 0, 125 деңгээлине коймок
if (inputString [0] == '$') {
String temp;
темп = inputString.substring (1);
int pixNum = temp.toInt ();
int rIndex = inputString.indexOf (',') + 1;
темп = inputString.substring (rIndex);
int rIntensity = temp.toInt ();
intgIndex = inputString.indexOf (',', rIndex + 1) + 1;
темп = inputString.substring (gIndex);
intgIntensity = temp.toInt ();
int bIndex = inputString.indexOf (',', gIndex + 1) + 1;
темп = inputString.substring (bIndex);
int bIntensity = temp.toInt ();
Serial.print ("Орнотуу");
Serial.print (pixNum);
Serial.print ("Rдан");
Serial.print (rIntensity);
Serial.print ("G to");
Serial.print (gIntensity);
Serial.print ("Bден");
Serial.println (bIntensity);
strip.setPixelColor (pixNum, strip. Color (rIntensity, gIntensity, bIntensity));
strip.show ();
}
if (inputString [0] == 's)) {
String temp;
int саат, мүнөт;
темп = inputString.substring (1);
саат = temp.toInt ();
int rIndex = inputString.indexOf (',') + 1;
темп = inputString.substring (rIndex);
мүнөт = temp.toInt ();
Serial.print ("Көрсөтүү убактысы:");
Serial.print (саат);
Serial.print (":");
Serial.print (мүнөт);
showTime (саат, мүнөт);
кечигүү (1000);
}
inputString = "";
stringComplete = жалган;
}
// кечиктирүү (1000);
}
voidserialEvent () {
while (Serial.available ()) {
char inChar = (char) Serial.read ();
inputString += inChar;
эгер (inChar == '\ n') {
stringComplete = true;
}
кечигүү (1);
}
}
voidclear () {
үчүн (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 * level [hourPixel], 20 + 20 * level [hourPixel]));
// strip.setPixelColor (мүнөтПиксел, strip. Color (40 + 40 * деңгээл [мүнөтПиксел], 30 + 30 * деңгээл [мүнөтПиксел], 20 + 20 * деңгээл [мүнөтПиксел]));
strip.setPixelColor (hourPixel, strip. Color (деңгээл [hourPixel], деңгээл [hourPixel], деңгээл [hourPixel]))));
strip.setPixelColor (мүнөтПиксел, strip. Color (деңгээл [мүнөтПиксел], деңгээл [мүнөтПиксел], деңгээл [мүнөтПиксел])));
// lightUp (strip. Color (255, 255, 255));
strip.show ();
}
voidshowTime (int саат, инт мүнөт) {
hourPixel = саат % 12;
minutePixel = (мүнөт / 5) % 12 + 12;
ачык ();
// strip.setPixelColor (hourPixel, strip. Color (40 + 40 * деңгээл [hourPixel], 30 + 30 * level [hourPixel], 20 + 20 * level [hourPixel]));
// strip.setPixelColor (мүнөтПиксел, strip. Color (40 + 40 * деңгээл [мүнөтПиксел], 30 + 30 * деңгээл [мүнөтПиксел], 20 + 20 * деңгээл [мүнөтПиксел]));
strip.setPixelColor (hourPixel, strip. Color (деңгээл [hourPixel], деңгээл [hourPixel], деңгээл [hourPixel]))));
strip.setPixelColor (мүнөтПиксел, strip. Color (деңгээл [мүнөтПиксел], деңгээл [мүнөтПиксел], деңгээл [мүнөтПиксел])));
// lightUp (strip. Color (255, 255, 255));
strip.show ();
}
voidlightUp (uint32_t түсү) {
үчүн (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, түс);
}
strip.show ();
}
voidlightUpEven () {
үчүн (uint16_t i = 0; i <strip.numPixels (); i ++) {
strip.setPixelColor (i, strip. Color (деңгээл , деңгээл , деңгээл )));
}
strip.show ();
}

GitHub тарабынан ❤ уюштурулган rawplywoodClock.ino көрүү

10 -кадам: Компьютердик көрүнүш - Калибрлөө

Компьютердик көрүнүш - Калибрлөө
Компьютердик көрүнүш - Калибрлөө
Компьютердик көрүнүш - Калибрлөө
Компьютердик көрүнүш - Калибрлөө

Мен бул долбоордо шпонду колдонбоону акылдуу түрдө тандадым. Эгерде менде болсо, жыгачтын калыңдыгы бардык светодиоддордун алдында бирдей болмок. Бирок, менде ар бир светодиоддун алдында жыгачтын ар кандай калыңдыгы болгондуктан жана жыгачтын түсү да ар түрдүү болгондуктан, 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;
PImage ourImage;
int runNumber = 0;
int acceptableError = 3;
int аткарылган;
int numPixelsInLed;
long ledIntensity;
int ledPower;
long targetIntensity = 99999999;
voidsetup () {
аткарылган = newint [numLed];
numPixelsInLed = newint [numLed];
ledIntensity = newlong [numLed];
ledPower = newint [numLed];
үчүн (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 ();
noStroke ();
жылмакай ();
кечигүү (1000); // Сериялык порттун ачылышын күтө туруңуз
}
voiddraw () {
if (video.available ()) {
эгер (аткарылган [ledNum] == 0) {
clearDisplay ();
кечигүү (1000);
video.read ();
сүрөт (видео, 0, 0, туурасы, бийиктиги); // Веб -камера видеосун экранга тартыңыз
saveFrame ("data/no_leds.jpg");
if (runNumber! = 0) {
эгер ((ledIntensity [ledNum] - targetIntensity)*100/targetIntensity> məqbulError) {
ledPower [ledNum] -= pow (0.75, runNumber)*100+1;
}
эгер ((targetIntensity - ledIntensity [ledNum])*100/targetIntensity> məqbulError) {
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);
while (myPort.available ()> 0) {
int inByte = myPort.read ();
// басып чыгаруу (char (inByte));
}
String imageName = "data/";
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 ();
background (0);
loadPixels ();
ledIntensity [ledNum] = 0;
numPixelsInLed [ledNum] = 0;
үчүн (int x = 0; x <туурасы; x ++) {
үчүн (int y = 0; y <бийиктик; y ++) {
PxPGetPixelDark (x, y, noLedImg.pixels, туурасы);
PxPGetPixelLed (x, y, ledImg.pixels, туурасы);
PxPGetPixelOrg (x, y, originalImg.pixels, туурасы);
эгер ((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];
эгер (targetIntensity> ledIntensity [ledNum] && runNumber == 0) {
targetIntensity = ledIntensity [ledNum];
}
updatePixels ();
}
басып чыгаруу (ledNum);
басып чыгаруу (',');
басып чыгаруу (ledPower [ledNum]);
басып чыгаруу (',');
println (ledIntensity [ledNum]);
ledNum ++;
эгер (ledNum == numLed) {
int donezo = 0;
үчүн (int i = 0; i <numLed; i ++) {
donezo += аткарылган ;
}
эгер (dozo == numLed) {
println ("ДАЙЫН");
үчүн (int i = 0; i <numLed; i ++) {
басып чыгаруу (i);
басып чыгаруу ("\ t");
println (ledPower );
}
басып чыгаруу ("int level [");
басып чыгаруу (ledNum);
басып чыгаруу ("] = {");
үчүн (int i = 0; i <numLed-1; i ++) {
басып чыгаруу (ledPower );
басып чыгаруу (',');
}
басып чыгаруу (ledPower [numLed -1]);
println ("};");
lightUpEven ();
while (true);
}
басып чыгаруу ("Максаттуу интенсивдүүлүк:");
эгер (runNumber == 0) {
targetIntensity -= 1;
}
println (targetIntensity);
ledNum = 0;
runNumber ++;
}
}
}
voidPxPGetPixelOrg (intx, inty, int pixelArray, intpixelsWidth) {
int thisPixel = pixelArray [x+y*pixelWidth]; // түстөрдү 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*pixelWidth]; // түстөрдү 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*pixelWidth]; // түстөрдү 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 композитордун бардыгын бир интге салып жатабыз
g = g << 8; // ошондуктан биз аларды өз жерлерине которушубуз керек
түс argb = a | r | g | б; // бинардык "же" операциясы алардын бардыгын бир интге кошот
pixelArray [x+y*pixelWidth] = argb; // акырында биз int түстү te менен пикселге койдук
}

GitHub тарабынан ❤ менен өткөрүлгөн rawcalibrateDispllay.pde көрүү

11 -кадам: Коштошуу эскертүүлөрү

Качуу үчүн тузактар:

* Жыгач менен сиз төлөгөн нерсеңизди аласыз. Ошентип, жакшы сапаттагы жыгач алыңыз. Берч фанери - жакшы тандоо; кандайдыр бир жеңил катуу жыгач жакшы иштейт. Мен жыгачка арзандадым жана чечимиме өкүндүм.

* Көпкө караганда азыраак бургулоо жакшы. Бир нече тешик менин чыгармам үчүн өтө тереңге кетти. Ал эми эпокси алдыңкы бетинде көрүнөт. Аны байкагандан кийин абдан байкалат.

* Түз учтун ордуна шардык учтуу бургуңузду колдонуңуз. Мен топтун учу менен эксперимент кылган жокмун, бирок жыйынтыктар алда канча жакшы болот деп ишенем.

Мен муну Etsy же tindieде сатуу идеясы менен флирт кылам. Эгер мааниси бар деп ойлосоңуз, төмөндө комментарий бере алсаңыз, мен абдан ыраазы болом:)

Сунушталууда: