Përmbajtje:

Arduino TFT Rainbow Noise Display: 5 hapa
Arduino TFT Rainbow Noise Display: 5 hapa

Video: Arduino TFT Rainbow Noise Display: 5 hapa

Video: Arduino TFT Rainbow Noise Display: 5 hapa
Video: My Top 5 Arduino Displays 2024, Korrik
Anonim
Image
Image
Efektet duke përdorur Zhurmë të Qetë
Efektet duke përdorur Zhurmë të Qetë

Ne e krijuam këtë projekt ylber duke përdorur teknika të ndryshme 'zhurmë', të cilat krijojnë efekte të kontrolluara të rastit. Duke shtuar pak ngjyrë, mund të prodhohet një efekt ylberi. Përdor një Arduino Nano dhe një ekran OLED 128x128. Ne shfaqëm efektet duke përdorur bibliotekën TFT. Ne gjithashtu përdorëm disa përbërës të ndryshëm si një dërrasë bukë dhe disa tela.

Hapi 1: Instalimet elektrike

Detyra më themelore ishte lidhja e OLED në Arduino. Ne lidhëm GND dhe VCC me autobusët përkatës në tabelën e bukës; SCL në pinin digjital 13; SDA në pinin dixhital 11; BRE në pinin dixhital 8; DC në pinin dixhital 9; CS në pinin dixhital 10 dhe në fund BL në 3.3V në Arduino. Duke përdorur kunjat 5v dhe GND nga Arduino ne ishim në gjendje të fuqizonim të gjithë tabelën e bukës.

Hapi 2: Zhurmë e qetë

Pas fillimit të kërkesave për ekranin TFT. Për të krijuar efektin e qetë të zhurmës, ne së pari kishim nevojë për një funksion bazë të zhurmës. Kjo kthen një vlerë relativisht të rastësishme midis 0 dhe 1 bazuar në vlerat x dhe y të kaluara. Isshtë e rëndësishme të theksohet se një kompjuter nuk mund të prodhojë kurrë një rezultat vërtet të rastit, dhe ky rastësi arrihet thjesht duke ndryshuar numrin sa më shumë që të jetë e mundur, pra numrat shumë të mëdhenj në ekuacion.

zhurma notuese (int x, int y) {int n; n = x + y * 57; n += (n << 13] ^ n; kthimi (1.0 - ((n * ((n * n * 15731) + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); }

Ne pastaj 'zbutim' zhurmën me një funksion tjetër. Kjo arrihet duke prodhuar një vlerë të bazuar jo vetëm në rezultatin nga koordinata e kaluar në funksion, por edhe koordinatat përreth. Si rezultat i kësaj, koordinatat pranë njëri -tjetrit prodhojnë një vlerë të ngjashme.

noton smoothNoise (noton x, noton y) {noton fractX = x - (int) x; Float fractY = y - (int) y; int x1 = ((int) (x) + zhurmë Gjerësia) % zhurmë Gjerësia; int y1 = ((int) (y) + zhurmëHeight) % zhurmëHeight; int x2 = (x1 + zhurmë Gjerësia - 1) % zhurmë Gjerësia; int y2 = (y1 + zhurmëLartësia - 1) % zhurmëLartësia; vlera notuese = 0.0f; vlera += fractX * fractY * zhurma (x1, y1); vlera += (1 - fractX) * zhurmë fractY * (x2, y1); vlera += fractX * (1 - fractY) * zhurmë (x1, y2); vlera += (1 - fractX) * (1 - fractY) * zhurmë (x2, y2); vlera e kthimit; }

Hapi 3: Efektet duke përdorur Zhurmë të Qetë

Efektet duke përdorur Zhurmë të Qetë
Efektet duke përdorur Zhurmë të Qetë

Me këtë krijuam dy efekte. Për ta bërë këtë, ne kaluam secilën piksel në OLED dhe morëm një vlerë të rastësishme të zhurmës bazuar në koordinatat x dhe y të këtyre pikselave. I pari nga këto efekte ne prodhuam duke përdorur vlerën e gjeneruar për të zgjedhur një ngjyrë dhe e ngjyrosëm atë piksel me ngjyrën e lartpërmendur. Efekti i dytë u prodhua në një mënyrë të ngjashme, por ne gjithashtu shumëzuam ngjyrën me vlerën e gjeneruar të zhurmës. Kjo i dha modelit një efekt më të errët. Kodi i përdorur është treguar më poshtë:

zbrazët Zhurmë2n3 (bool Zhurmshme) {për (int y = 0; y <zhurmëHeight; y ++) {për (int x = 0; x 8) absNoise = 8; nëse (Zhurmshme) setNoisyColour (ngjyrat [absNoise], zhurma); tjetër setBlockColour (ngjyrat [absNoise]); TFTscreen.point (x, y); }}} void setNoisyColour (Ngjyra e ngjyrave, zhurma e notimit) {TFTscreen.stroke (zhurma e ngjyrës së kuqe *, zhurma e ngjyrës së gjelbër *, ngjyra.blue * zhurma); } void setBlockColour (Color color) {TFTscreen.stroke (colour.red, colour.green, colour.blue); }

Hapi 4: Efektet e Gradientit të Rastit

Efektet e Gradientit të Rastit
Efektet e Gradientit të Rastit
Efektet e Gradientit të Rastit
Efektet e Gradientit të Rastit
Efektet e Gradientit të Rastit
Efektet e Gradientit të Rastit

Ekzistojnë dy efekte që prodhojnë një gradient të rastit. Efekti i parë i vendos pikselët në lidhje me ngjyrën e tyre rgb, duke bërë ngadalë një model gradienti në ekran. E dyta përdor të njëjtat pixel me ngjyra si e para, por i vendos ato në një rend fiks, duke krijuar një gradient diagonal përgjatë ekranit.

Këtu është e para (bazuar në ngjyrat):

void Zhurma1 () {për (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 = Ngjyra aktuale [z] [0]; G = Ngjyra aktuale [z] [1]; B = Ngjyra aktuale [z] [2]; për (int x = 0; x <128; x ++) {për (int y = 0; y <128; y ++) {int R_Lower = R - ((x+y) / 4); nëse (R_Lower = 255) {R_Higher = 254; } int R_Offset = rastësor (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); nëse (G_Lower = 255) {G_Higher = 254; } int G_Offset = rastësor (G_Lower, G_Higher); int B_Lower = B - ((x + y) / 4); nëse (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); nëse (B_Higher> = 255) {B_Higher = 254; } int B_Offset = rastësor (B_Lower, B_Higher); int mult = 2; nëse (z == 1) mult = 1; TFTscreen.stroke (R_Offset * mult, G_Offset * mult, B_Offset * mult); 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))); }}}}

Dhe e dyta (efekti më i rregullt):

void Zhurma4 () {për (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 = Ngjyra aktuale [z] [0]; G = Ngjyra aktuale [z] [1]; B = Ngjyra aktuale [z] [2]; për (int x = 0; x <128; x ++) {për (int y = 0; y <128; y ++) {int R_Lower = R - ((x+y) / 4); nëse (R_Lower = 255) {R_Higher = 254; } int R_Offset = rastësor (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); nëse (G_Lower = 255) {G_Higher = 254; } int G_Offset = rastësor (G_Lower, G_Higher); int B_Lower = B - ((x + y) / 4); nëse (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); nëse (B_Higher> = 255) {B_Higher = 254; } int B_Offset = rastësor (B_Lower, B_Higher); int mult = 2; nëse (z == 1) mult = 1; TFTscreen.stroke (R_Offset * mult, G_Offset * mult, B_Offset * mult); TFTscreen.point (x, y); }}}}

Hapi 5: Rezultati Përfundimtar

Në fund, ne i kombinuam këto efekte në një lloj 'shfaqjeje rrëshqitëse' të ylberëve. Për ta arritur këtë, ne thjesht e quajtëm secilin funksion pas tjetrit në një lak:

ndërsa (e vërtetë) {Zhurma2n3 (e rreme); Zhurma2n3 (e vërtetë); TFTscreen. sfond (0, 0, 0); Zhurma 1 (); Zhurmë4 (); }

Recommended: