Mundarija:

Arduino TFT kamalakdagi shovqinli displey: 5 qadam
Arduino TFT kamalakdagi shovqinli displey: 5 qadam

Video: Arduino TFT kamalakdagi shovqinli displey: 5 qadam

Video: Arduino TFT kamalakdagi shovqinli displey: 5 qadam
Video: SKR Pro V1.1 - TMC2208 UART v3.0 (BigTreeTech) 2024, Iyul
Anonim
Image
Image
Yumshoq shovqin yordamida effektlar
Yumshoq shovqin yordamida effektlar

Biz bu kamalak loyihasini boshqariladigan tasodifiy effektlarni yaratadigan turli xil "shovqin" texnikasi yordamida yaratdik. Agar rang qo'shilsa, kamalak effekti paydo bo'lishi mumkin. Unda Arduino Nano va 128x128 OLED -displey ishlatiladi. Biz effektlarni TFT kutubxonasi yordamida ko'rsatdik. Biz, shuningdek, non paneli va bir nechta simlar kabi turli xil komponentlardan foydalanganmiz.

1 -qadam: simlarni ulash

Eng asosiy vazifa OLED -ni Arduino -ga ulash edi. Biz GND va VCC ni non taxtasidagi tegishli avtobuslarga uladik; SCL raqamli pin 13 ga; SDA raqamli pin 11gacha; RES raqamli pin 8 ga; DC to raqamli pin 9; CS raqamli pin 10 -ga va nihoyat Arduino -da BL -dan 3.3V gacha. Arduino -dan 5v va GND pinlari yordamida biz butun non taxtasini quvvat bilan ta'minladik.

2 -qadam: Yumshoq shovqin

TFT displeyiga qo'yiladigan talablarni ishga tushirgandan so'ng. Yumshoq shovqin effektini yaratish uchun bizga birinchi navbatda asosiy shovqin funktsiyasi kerak edi. Bu x va y qiymatlari asosida 0 dan 1 gacha bo'lgan tasodifiy qiymatni qaytaradi. Shuni ta'kidlash kerakki, kompyuter hech qachon chindan ham tasodifiy natija chiqara olmaydi va bu tasodifiylikka sonni iloji boricha o'zgartirish orqali erishiladi., shuning uchun tenglamadagi juda katta sonlar.

suzuvchi shovqin (int x, int y) {int n; n = x + y * 57; n += (n << 13) ^ n; qaytish (1.0 - ((n * ((n * n * 15731) + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); }

Biz shovqinni boshqa funktsiya bilan "silliqlaymiz". Bunga faqat funktsiyaga berilgan koordinataning natijasiga emas, balki uning atrofidagi koordinatalarga asoslangan qiymatni ishlab chiqarish orqali erishiladi. Natijada, bir -biriga yaqin joylashgan koordinatalar xuddi shunday qiymat hosil qiladi.

float smoothNoise (float x, float y) {float fractX = x - (int) x; float fractY = y - (int) y; int x1 = ((int) (x) + shovqin kengligi) % shovqin kengligi; int y1 = ((int) (y) + shovqin balandligi) % shovqin balandligi; int x2 = (x1 + noiseWidth - 1) % noiseWidth; int y2 = (y1 + shovqin balandligi - 1) % shovqin balandligi; float qiymati = 0,0f; qiymat += fractX * fractY * shovqin (x1, y1); qiymat += (1 - fractX) * fractY * shovqin (x2, y1); qiymat += fractX * (1 - fractY) * shovqin (x1, y2); qiymat += (1 - fractX) * (1 - fractY) * shovqin (x2, y2); qaytarish qiymati; }

3 -qadam: Yumshoq shovqin yordamida effektlar

Yumshoq shovqin yordamida effektlar
Yumshoq shovqin yordamida effektlar

Bu bilan biz ikkita effekt yaratdik. Buning uchun biz OLED -dagi har bir pikselni aylanib chiqdik va bu piksellarning x va y koordinatalariga asoslangan tasodifiy shovqin qiymatini oldik. Bu effektlarning birinchisi, biz hosil qilingan qiymatdan foydalanib, rangni tanladik va shu pikselni yuqorida aytib o'tilgan rangga bo'yadik. Ikkinchi effekt ham xuddi shunday ishlab chiqarilgan, lekin biz rangni shovqin qiymatiga ko'paytirdik. Bu naqshga yanada soyali effekt berdi. Amaldagi kod quyida ko'rsatilgan:

void Noise2n3 (bool Noisy) {for (int y = 0; y <noiseHeight; y ++) {for (int x = 0; x 8) absNoise = 8; if (Shovqinli) setNoisyColour (ranglar [absNoise], shovqin); else setBlockColour (ranglar [absNoise]); TFTscreen.point (x, y); }}} void setNoisyColour (Rang rangi, suzuvchi shovqin) {TFTscreen.stroke (colour.red * shovqin, colour.green * shovqin, colour.blue * shovqin); } bo'sh bo'sh setBlockColour (Rang rangi) {TFTscreen.stroke (colour.red, colour.green, colour.blue); }

4 -qadam: Tasodifiy gradyan effektlari

Tasodifiy gradient effektlari
Tasodifiy gradient effektlari
Tasodifiy gradient effektlari
Tasodifiy gradient effektlari
Tasodifiy gradient effektlari
Tasodifiy gradient effektlari

Tasodifiy gradyan hosil qiladigan ikkita effekt mavjud. Birinchi effekt piksellarni rgb rangiga nisbatan joylashtirib, asta -sekin ekranga gradient naqshini ko'rsatadi. Ikkinchisi birinchisi bilan bir xil rangdagi piksellardan foydalanadi, lekin ularni ekran bo'ylab diagonal gradyan hosil qilib, belgilangan tartibda joylashtiradi.

Mana birinchi (ranglarga qarab):

void Noise1 () {for (int z = 0; z <3; z ++) {TFTscreen.background (0, 0, 0); int CurrentColour [3] [3] = {{64, 35, 26}, {24, 64, 34}, {20, 18, 64}}; R = CurrentColour [z] [0]; G = CurrentColour [z] [1]; B = CurrentColour [z] [2]; for (int x = 0; x <128; x ++) {for (int y = 0; y <128; y ++) {int R_Lower = R - ((x+y) / 4); agar (R_Lower = 255) {R_Higher = 254; } int R_Offset = tasodifiy (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); agar (G_Lower = 255) {G_Higher = 254; } int G_Offset = tasodifiy (G_Lower, G_Higher); int B_Lower = B - ((x + y) / 4); agar (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); agar (B_Higher> = 255) {B_Higher = 254; } int B_Offset = tasodifiy (B_Lower, B_Higher); int mult = 2; agar (z == 1) mult = 1; TFTscreen.stroke (R_Offset * ko'p, G_Offset * ko'p, B_Offset * ko'p); TFTscreen.point ((R_Offset * (B_Offset / 32)), (G_Offset * (B_Offset / 32))); TFTscreen.point ((G_Offset * (B_Offset / 32)), (R_Offset * (B_Offset / 32))); TFTscreen.point ((B_Offset * (G_Offset / 32)), (R_Offset * (G_Offset / 32))); }}}}

Va ikkinchisi (tartibli ta'sir):

void Noise4 () {for (int z = 0; z <3; z ++) {TFTscreen.background (0, 0, 0); int CurrentColour [3] [3] = {{64, 35, 26}, {24, 64, 34}, {20, 18, 64}}; R = CurrentColour [z] [0]; G = CurrentColour [z] [1]; B = CurrentColour [z] [2]; for (int x = 0; x <128; x ++) {for (int y = 0; y <128; y ++) {int R_Lower = R - ((x+y) / 4); agar (R_Lower = 255) {R_Higher = 254; } int R_Offset = tasodifiy (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); agar (G_Lower = 255) {G_Higher = 254; } int G_Offset = tasodifiy (G_Lower, G_Higher); int B_Lower = B - ((x + y) / 4); agar (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); agar (B_Higher> = 255) {B_Higher = 254; } int B_Offset = tasodifiy (B_Lower, B_Higher); int mult = 2; agar (z == 1) mult = 1; TFTscreen.stroke (R_Offset * ko'p, G_Offset * ko'p, B_Offset * ko'p); TFTscreen.point (x, y); }}}}

5 -qadam: Yakuniy natija

Oxir -oqibat, biz bu effektlarni kamalaklarning "slayd -shousi" ga birlashtirdik. Bunga erishish uchun biz har bir funktsiyani bir muncha vaqt ketma -ketlikda chaqirdik:

while (true) {Noise2n3 (false); Noise2n3 (haqiqiy); TFTscreen.background (0, 0, 0); Shovqin1 (); Shovqin4 (); }

Tavsiya: