Sadržaj:
- Korak 1: Ožičenje
- Korak 2: Glatka buka
- Korak 3: Učinci pomoću glatke buke
- Korak 4: Slučajni gradijentni učinci
- Korak 5: Konačni rezultat
Video: Arduino TFT zaslon dugine buke: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
Ovaj dugin projekt stvorili smo koristeći različite tehnike 'buke' koje stvaraju kontrolirane slučajne efekte. Dodavanjem neke boje mogao bi se stvoriti efekt duge. Koristi Arduino Nano i OLED zaslon 128x128. Efekte smo prikazali pomoću TFT knjižnice. 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. Spojili smo GND i VCC na odgovarajuće sabirnice na ploči za kruh; SCL na digitalni pin 13; SDA na digitalni pin 11; RES na digitalni pin 8; Istosmjerni 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 slučajnost postiže samo promjenom broja što je više moguće, dakle 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" šum 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) + noiseWidth) % 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: Učinci pomoću glatke buke
Time smo stvorili dva efekta. Da bismo to učinili, petljali smo kroz svaki piksel na OLED -u i uzeli slučajnu vrijednost šuma na temelju koordinata x i y ovih piksela. Prvi od ovih efekata proizveli smo pomoću generirane vrijednosti za odabir boje i obojili taj piksel spomenutom bojom. Drugi efekt proizveden je na sličan način, ali smo također pomnožili boju s generiranom vrijednošću šuma. To je uzorku dalo zasjenjeniji učinak. 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 (boja.crvena, boja.zelena, boja.plava); }
Korak 4: Slučajni gradijentni učinci
Postoje dva učinka koji proizvode slučajni gradijent. Prvi učinak postavlja piksele u odnosu na njihovu rgb boju, polako prikazujući gradijentni uzorak na zaslonu. Drugi koristi piksele u istoj boji kao i prvi, ali ih postavlja fiksnim redoslijedom stvarajući dijagonalni gradijent duž zaslona.
Evo prvog (na temelju 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 = Boja struje [z] [0]; G = Boja struje [z] [1]; B = Boja struje [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_Sniži, R_Više); 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_Donji = B - ((x + y) / 4); if (B_Sniženje <1) {B_Lower = 0; } int B_Više = B + ((x + y) / 4); ako je (B_Više> = 255) {B_Više = 254; } int B_Offset = slučajno (B_Sniženje, B_Više); int mult = 2; ako je (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 učinak):
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 = Boja struje [z] [0]; G = Boja struje [z] [1]; B = Boja struje [z] [2]; za (int x = 0; x <128; x ++) {za (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_Sniži, R_Više); 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_Donji = B - ((x + y) / 4); if (B_Sniženje <1) {B_Lower = 0; } int B_Više = B + ((x + y) / 4); ako je (B_Više> = 255) {B_Više = 254; } int B_Offset = slučajno (B_Sniženje, B_Više); int mult = 2; ako je (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 učinke u svojevrsni 'slideshow' duginih boja. Da bismo to postigli, jednostavno smo pozvali svaku funkciju jednu za drugom u while petlji:
while (istina) {Noise2n3 (false); Buka2n3 (istina); TFTscreen.background (0, 0, 0); Buka1 (); Buka4 (); }
Preporučeni:
Dugine kocke: 6 koraka (sa slikama)
Rainbow Dice: Ovo čini kutiju za igre s kockicama sa 5 kockica napravljenu od smd LED dioda u 5 boja. Softver za upravljanje omogućuje različite načine igre s više kockica. Jedan glavni prekidač omogućuje odabir igre i bacanje kockica. Pojedinačni prekidači pored eac
Mjerač ili znak razine nesigurne buke: 4 koraka (sa slikama)
Mjerač ili znak razine nesigurne buke: Volim gledati kreativne projekte ljudi. Suvremeni alati & tehnologija nam daje toliko kreativnih mogućnosti. Predajem tvrde materijale srednjoškolcima u srednjoj školi na Novom Zelandu pa se uvijek razvijam & isprobavanje novih stvari. Thi
TTGO (kolor) zaslon s mikropythonom (TTGO T-zaslon): 6 koraka
TTGO (kolor) zaslon s Micropythonom (TTGO T-zaslon): TTGO T-zaslon je ploča temeljena na ESP32 koja uključuje zaslon u boji od 1,14 inča. Ploča se može kupiti za nagradu manju od 7 USD (uključujući dostavu, nagrada viđena na banggood -u). To je nevjerojatna nagrada za ESP32 uključujući zaslon. T
I2C / IIC LCD zaslon - Upotrijebite SPI LCD za I2C LCD zaslon Korištenje SPI do IIC modula s Arduinom: 5 koraka
I2C / IIC LCD zaslon | Upotrijebite SPI LCD na I2C LCD zaslonu Korištenje SPI na IIC modula s Arduinom: Zdravo dečki, budući da normalni SPI LCD 1602 ima previše žica za povezivanje pa je vrlo teško povezati ga s arduinom, ali na tržištu postoji jedan modul koji može pretvoriti SPI zaslon u IIC zaslon pa morate spojiti samo 4 žice
I2C / IIC LCD zaslon - Pretvorite SPI LCD u I2C LCD zaslon: 5 koraka
I2C / IIC LCD zaslon | Pretvorite SPI LCD u I2C LCD zaslon: za korištenje spi lcd zaslona potrebno je previše povezivanja, što je zaista teško učiniti pa sam pronašao modul koji može pretvoriti i2c lcd u spi lcd pa krenimo