Mündəricat:

Arduino TFT Gökkuşağı səs -küy ekranı: 5 addım
Arduino TFT Gökkuşağı səs -küy ekranı: 5 addım

Video: Arduino TFT Gökkuşağı səs -küy ekranı: 5 addım

Video: Arduino TFT Gökkuşağı səs -küy ekranı: 5 addım
Video: ЛУЧШИЙ ЭКРАН ДЛЯ АРДУИНО ARDUINO TFT LCD 1.44 SPI 128Х128 ЗА $3! 2024, Noyabr
Anonim
Image
Image
Hamar səs -küydən istifadə edən təsirlər
Hamar səs -küydən istifadə edən təsirlər

Bu göy qurşağı layihəsini nəzarət edilən təsadüfi effektlər yaradan müxtəlif 'səs -küy' üsullarından istifadə edərək yaratdıq. Bir az rəng əlavə edərək göy qurşağı effekti yarana bilər. Arduino Nano və 128x128 OLED ekrandan istifadə edir. Efektləri TFT kitabxanasından istifadə edərək nümayiş etdirdik. Çörək taxtası və bir neçə tel kimi müxtəlif komponentlərdən də istifadə etdik.

Addım 1: Kabel çəkmə

Ən əsas vəzifə OLED -nin Arduino -ya qoşulması idi. GND və VCC -ni çörək lövhəsindəki müvafiq avtobuslara bağladıq; SCL rəqəmsal pin 13 -ə; SDA rəqəmsal pin 11; Rəqəmsal pin 8 -ə RES; DC -dən rəqəmsal pin 9 -a; CS rəqəmsal pin 10 -a və nəhayət Arduino -da 3.3V -ə qədər BL. Arduinonun 5v və GND pinlərindən istifadə edərək bütün çörək lövhəsinə enerji verə bildik.

Addım 2: Hamar səs -küy

TFT ekranı üçün tələbləri başladıqdan sonra. Hamar səs effekti yaratmaq üçün əvvəlcə əsas səs -küy funksiyasına ehtiyacımız var. Bu, verilən x və y dəyərlərinə əsaslanaraq 0 ilə 1 arasında nisbətən təsadüfi bir dəyər qaytarır. Qeyd etmək vacibdir ki, kompüter heç vaxt həqiqətən təsadüfi bir nəticə verə bilməz və bu təsadüfiyyətə yalnız sayı mümkün qədər dəyişdirməklə nail olunur., buna görə də tənlikdəki çox böyük ədədlər.

float səs (int x, int y) {int n; n = x + y * 57; n += (n << 13) ^ n; qayıt (1.0 - ((n * ((n * n * 15731) + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); }

Daha sonra səs -küyü başqa bir funksiya ilə 'hamarlaşdırırıq'. Bu, yalnız funksiyaya verilən koordinatın nəticəsinə deyil, həm də ətrafdakı koordinatlara əsaslanan bir dəyər istehsal etməklə əldə edilir. Bunun nəticəsində bir -birinə yaxın olan koordinatlar oxşar bir dəyər yaradır.

float smoothNoise (float x, float y) {float fractX = x - (int) x; float fractY = y - (int) y; int x1 = ((int) (x) + səs genişliyi) % səs genişliyi; int y1 = ((int) (y) + səs -küy hündürlüyü) % səs -küy; int x2 = (x1 + noiseWidth - 1) % noiseWidth; int y2 = (y1 + noiseHeight - 1) % noiseHeight; float dəyəri = 0.0f; dəyər += fractX * fractY * səs -küy (x1, y1); dəyər += (1 - fractX) * fractY * səs -küy (x2, y1); dəyər += fractX * (1 - fractY) * səs -küy (x1, y2); dəyər += (1 - fractX) * (1 - fractY) * səs -küy (x2, y2); qaytarma dəyəri; }

Addım 3: Hamar səs -küydən istifadə edərək təsirlər

Hamar səs -küydən istifadə edən təsirlər
Hamar səs -küydən istifadə edən təsirlər

Bununla iki effekt yaratdıq. Bunun üçün OLED üzərindəki hər bir pikseldən keçdik və bu piksellərin x və y koordinatlarına əsaslanaraq təsadüfi səs -küy dəyərini götürdük. Bu effektdən birincisi, bir rəng seçmək üçün yaradılan dəyəri istifadə edərək istehsal etdik və bu pikseli yuxarıda göstərilən rənglə rəngləndirdik. İkinci effekt də oxşar şəkildə istehsal edildi, amma biz də rəngi yaranan səs -küy dəyərinə vurduq. Bu nümunəyə daha kölgəli bir təsir verdi. İstifadə olunan kod aşağıda göstərilmişdir:

void Noise2n3 (bool Noisy) {for (int y = 0; y <noiseHeight; y ++) {for (int x = 0; x 8) absNoise = 8; əgər (Səsli) setNoisyColour (rənglər [absNoise], səs -küy); başqa setBlockColour (rənglər [absNoise]); TFTscreen.point (x, y); }}} boş setNoisyColour (Rəng rəngi, üzən səs -küy) {TFTscreen.stroke (rəng.qırmızı * səs -küy, rəng.green * səs -küy, rəng.mavi * səs -küy); } etibarsız setBlockColour (Rəng rəngi) {TFTscreen.stroke (colour.red, colour.green, colour.blue); }

Addım 4: Təsadüfi Gradient Efektləri

Təsadüfi Gradient effektləri
Təsadüfi Gradient effektləri
Təsadüfi Gradient effektləri
Təsadüfi Gradient effektləri
Təsadüfi Gradient effektləri
Təsadüfi Gradient effektləri

Təsadüfi bir gradient yaradan iki təsir var. İlk təsir, pikselləri rgb rənglərinə görə yerləşdirir və yavaş -yavaş ekrana bir gradient nümunəsi verir. İkincisi, birincisi ilə eyni rəngli pikselləri istifadə edir, lakin ekran boyunca diaqonal bir qradiyent yaradaraq onları sabit bir qaydada yerləşdirir.

Budur birincisi (rənglərə görə):

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); əgər (R_Lower = 255) {R_Higher = 254; } int R_Offset = təsadüfi (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); əgər (G_Lower = 255) {G_Higher = 254; } int G_Offset = təsadüfi (G_Lower, G_Higher); int B_Lower = B - ((x + y) / 4); əgər (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); əgər (B_Higher> = 255) {B_Higher = 254; } int B_Offset = təsadüfi (B_Lower, B_Higher); int mult = 2; əgər (z == 1) mult = 1; TFTscreen.stroke (R_Offset * çoxlu, G_Offset * çoxlu, B_Offsetli * çoxlu); 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))); }}}}

İkincisi (daha nizamlı tə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); əgər (R_Lower = 255) {R_Higher = 254; } int R_Offset = təsadüfi (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); əgər (G_Lower = 255) {G_Higher = 254; } int G_Offset = təsadüfi (G_Lower, G_Higher); int B_Lower = B - ((x + y) / 4); əgər (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); əgər (B_Higher> = 255) {B_Higher = 254; } int B_Offset = təsadüfi (B_Lower, B_Higher); int mult = 2; əgər (z == 1) mult = 1; TFTscreen.stroke (R_Offset * çoxlu, G_Offset * çoxlu, B_Offsetli * çoxlu); TFTscreen.point (x, y); }}}}

Addım 5: Son nəticə

Sonda bu təsirləri bir növ göy qurşağı 'slayd şousu' na birləşdirdik. Buna nail olmaq üçün hər bir funksiyanı bir müddət sonra bir -birinin ardınca çağırdıq:

while (true) {Noise2n3 (false); Noise2n3 (doğru); TFTscreen.background (0, 0, 0); Səs -küy1 (); Səs -küy4 (); }

Tövsiyə: