Sadržaj:
- Korak 1: Ožičenje
- Korak 2: Glatka buka
- Korak 3: Efekti pomoću glatke buke
- Korak 4: Slučajni gradijentni efekti
- Korak 5: Konačni rezultat
Video: Arduino TFT ekran duge buke: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:06
Ovaj dugin projekt stvorili smo koristeći različite tehnike 'buke' koje stvaraju kontrolirane slučajne efekte. Dodavanjem neke boje mogao bi se stvoriti efekat duge. Koristi Arduino Nano i OLED ekran 128x128. Efekte smo prikazali pomoću TFT biblioteke. Koristili smo i neke razne komponente, poput ploče za kruh i nekoliko žica.
Korak 1: Ožičenje
Najosnovniji zadatak bilo je ožičenje OLED -a na Arduino. Povezali smo GND i VCC na odgovarajuće sabirnice na ploči za hljeb; SCL na digitalni pin 13; SDA na digitalni pin 11; RES na digitalni pin 8; DC na digitalni pin 9; CS na digitalni pin 10 i na kraju BL na 3.3V na Arduinu. Koristeći 5v i GND pinove iz Arduina uspjeli smo napajati cijelu ploču za kruh.
Korak 2: Glatka buka
Nakon inicijalizacije zahtjeva za TFT zaslon. Da bismo stvorili efekt glatke buke, prvo nam je bila potrebna osnovna funkcija šuma. Ovo vraća relativno slučajnu vrijednost između 0 i 1 na temelju prenesenih vrijednosti x i y. Važno je napomenuti da računalo nikada ne može proizvesti zaista slučajan rezultat, a ta se nasumičnost postiže samo promjenom broja što je više moguće, otuda i vrlo veliki brojevi u jednadžbi.
float noise (int x, int y) {int n; n = x + y * 57; n += (n << 13) ^ n; return (1.0 - ((n * ((n * n * 15731) + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); }
Zatim 'uglađujemo' buku drugom funkcijom. To se postiže stvaranjem vrijednosti ne samo na temelju rezultata iz koordinate prenesene u funkciju, već i okolnih koordinata. Kao rezultat toga, koordinate u blizini jedna drugoj proizvode sličnu vrijednost.
float smoothNoise (float x, float y) {float fractX = x - (int) x; float fractY = y - (int) y; int x1 = ((int) (x) + widthWidth) % noiseWidth; int y1 = ((int) (y) + noiseHeight) % noiseHeight; int x2 = (x1 + noiseWidth - 1) % noiseWidth; int y2 = (y1 + noiseHeight - 1) % noiseHeight; float vrijednost = 0,0f; vrijednost += fractX * fractY * šum (x1, y1); vrijednost += (1 - fractX) * fractY * šum (x2, y1); vrijednost += fractX * (1 - fractY) * šum (x1, y2); vrijednost += (1 - fractX) * (1 - fractY) * šum (x2, y2); povratna vrijednost; }
Korak 3: Efekti pomoću glatke buke
Ovim smo stvorili dva efekta. Da bismo to učinili, petljali smo kroz svaki piksel na OLED -u i uzeli slučajnu vrijednost šuma na osnovu koordinata x i y ovih piksela. Prvi od ovih efekata proizveli smo korištenjem generirane vrijednosti za odabir boje i obojili taj piksel spomenutom bojom. Drugi efekat je proizveden na sličan način, ali smo takođe pomnožili boju sa generisanom vrednošću buke. To je uzorku dalo zasjenjeniji efekt. Kôd koji se koristi prikazan je ispod:
void Noise2n3 (bool Noisy) {for (int y = 0; y <noiseHeight; y ++) {for (int x = 0; x 8) absNoise = 8; if (Bučno) setNoisyColour (boje [absNoise], šum); else setBlockColour (boje [absNoise]); TFTscreen.point (x, y); }}} void setNoisyColour (Boja boje, float šum) {TFTscreen.stroke (boja.crvena * šum, boja.zelena * buka, boja.plava * šum); } void setBlockColour (boja u boji) {TFTscreen.stroke (color.red, colour.green, colour.blue); }
Korak 4: Slučajni gradijentni efekti
Postoje dva efekta koji proizvode slučajni gradijent. Prvi efekat postavlja piksele u odnosu na njihovu rgb boju, polako prikazujući gradijentni uzorak na ekranu. Drugi koristi piksele u istoj boji kao i prvi, ali ih postavlja u fiksnom redoslijedu, stvarajući dijagonalni gradijent duž ekrana.
Evo prvog (na osnovu boja):
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 = Trenutna boja [z] [0]; G = Trenutna boja [z] [1]; B = Trenutna boja [z] [2]; za (int x = 0; x <128; x ++) {for (int y = 0; y <128; y ++) {int R_Lower = R - ((x+y) / 4); if (R_Lower = 255) {R_Higher = 254; } int R_Offset = slučajno (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); if (G_Lower = 255) {G_Higher = 254; } int G_Offset = slučajno (G_Lower, G_Higher); int B_Lower = B - ((x + y) / 4); if (B_Lower <1) {B_Lower = 0; } int B_Više = B + ((x + y) / 4); if (B_Više> = 255) {B_Više = 254; } int B_Offset = random (B_Lower, B_Higher); int mult = 2; if (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))); }}}}
I drugo (uredniji efekat):
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 = Trenutna boja [z] [0]; G = Trenutna boja [z] [1]; B = Trenutna boja [z] [2]; za (int x = 0; x <128; x ++) {for (int y = 0; y <128; y ++) {int R_Lower = R - ((x+y) / 4); if (R_Lower = 255) {R_Higher = 254; } int R_Offset = slučajno (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); if (G_Lower = 255) {G_Higher = 254; } int G_Offset = slučajno (G_Lower, G_Higher); int B_Lower = B - ((x + y) / 4); if (B_Lower <1) {B_Lower = 0; } int B_Više = B + ((x + y) / 4); if (B_Više> = 255) {B_Više = 254; } int B_Offset = random (B_Lower, B_Higher); int mult = 2; if (z == 1) mult = 1; TFTscreen.stroke (R_Offset * mult, G_Offset * mult, B_Offset * mult); TFTscreen.point (x, y); }}}}
Korak 5: Konačni rezultat
Na kraju smo spojili ove efekte u neku vrstu 'slideshowa' duginih boja. Da bismo to postigli, jednostavno smo pozvali svaku funkciju jednu za drugom u while petlji:
while (tačno) {Noise2n3 (false); Noise2n3 (true); TFTscreen.background (0, 0, 0); Noise1 (); Noise4 (); }
Preporučuje se:
Mjerač ili znak nesigurne buke: 4 koraka (sa slikama)
Mjerač ili znak nesigurne razine buke: Volim gledati kreativne projekte ljudi. Savremeni alati & tehnologija nam daje toliko kreativnih mogućnosti. Predajem teške materijale učenicima srednjih škola u jednoj srednjoj školi na Novom Zelandu pa se uvijek razvijam & isprobavanje novih stvari. Thi
Sat riječi s efektom duge i pozadinskim svjetlom .: 6 koraka
Sat sa riječima sa efektom duge i pozadinskim svjetlom .: Početak je tu. Prednja ploča je 40 x 40 cm i spremna je
Bežično svjetlo duge koje napaja Tesla zavojnica: 6 koraka
Bežično svjetlo duge koje napaja Tesla zavojnica: Ovo je projekt koji koristi radiofrekventnu energiju koju generira mala, bipolarna Teslina zavojnica za napajanje prstena raznobojnih svjetiljki sa hladnom katodom. Kao i kod svih visokonaponskih uređaja, pri radu budite oprezni i procijenite
Dugin sat sa riječima sa punim efektom duge i više: 13 koraka (sa slikama)
Rainbow satovi s riječima sa punim efektom duge i više: ciljevi1) Jednostavno2) Nije skupo3) Što je moguće efikasnije energetski efikasno Sat sa riječima s dugim dugama sa efektom pune duge.A Smiley na satu riječi. Jednostavno IC daljinsko upravljanje Ažurirajte 03. nov-18 LDR za kontrola svjetline neopikselnog ažuriranja 01-jan
Kruna duge od filca i neopiksela: 8 koraka (sa slikama)
Kruna duge od filca i neopiksela: Ovog vikenda napravio sam laganu krunicu sa neopikselom za moju trogodišnju rođaku. Uvijek mi se činila prilično zanesena mojim svjetlosnim napravama pa sam zaključio da je vrijeme da ima jednu svoju. Izgleda prilično cool i voljela bih ga indoktrinirati