Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-23 14:59
Mes sukūrėme šį vaivorykštės projektą naudodami įvairius „triukšmo“metodus, kurie sukuria kontroliuojamus atsitiktinius efektus. Pridėjus šiek tiek spalvų, galima sukurti vaivorykštės efektą. Jame naudojamas „Arduino Nano“ir 128x128 OLED ekranas. Efektus rodėme naudodami TFT biblioteką. Mes taip pat naudojome įvairius komponentus, tokius kaip duonos lenta ir keli laidai.
1 žingsnis: laidų prijungimas
Pagrindinė užduotis buvo prijungti OLED prie „Arduino“. Mes prijungėme GND ir VCC prie atitinkamų duonos lentos magistralių; SCL į skaitmeninį kaištį 13; SDA į skaitmeninį kaištį 11; AEI į 8 skaitmeninį kaištį; DC į skaitmeninį kaištį 9; CS į skaitmeninį kaištį 10 ir galiausiai BL į 3.3V „Arduino“. Naudodami „Arduino“5v ir GND kaiščius, mes galėjome maitinti visą duonos lentą.
2 žingsnis: sklandus triukšmas
Suformavus TFT ekrano reikalavimus. Norėdami sukurti sklandų triukšmo efektą, pirmiausia mums reikėjo pagrindinės triukšmo funkcijos. Grąžinama santykinai atsitiktinė reikšmė nuo 0 iki 1, remiantis įvestomis x ir y reikšmėmis. Svarbu pažymėti, kad kompiuteris niekada negali pateikti tikrai atsitiktinio rezultato, o šis atsitiktinumas pasiekiamas tik kiek įmanoma pakeitus skaičių, todėl labai dideli skaičiai lygtyje.
plūdės triukšmas (int x, int y) {int n; n = x + y * 57; n += (n << 13) ^ n; grįžimas (1,0 - ((n * ((n * n * 15731) + 789221) + 1376312589) ir 0x7fffffff) / 1073741824.0); }
Tada triukšmą „išlyginame“kita funkcija. Tai pasiekiama sukuriant vertę, pagrįstą ne tik rezultatu iš koordinačių, perduotų funkcijai, bet ir aplinkinėmis koordinatėmis. Dėl to koordinatės, esančios šalia viena kitos, sukuria panašią vertę.
float smoothNoise (float x, float y) {float fractX = x - (int) x; plūdės lūžisY = 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; plūdės vertė = 0,0f; reikšmė += fractX * fractY * triukšmas (x1, y1); reikšmė += (1 - fractX) * fractY * triukšmas (x2, y1); reikšmė += fractX * (1 - fractY) * triukšmas (x1, y2); vertė += (1 - fractX) * (1 - fractY) * triukšmas (x2, y2); grąžinimo vertė; }
3 žingsnis: efektai naudojant sklandų triukšmą
Taip sukūrėme du efektus. Norėdami tai padaryti, mes peržiūrėjome kiekvieną OLED pikselį ir paėmėme atsitiktinę triukšmo vertę, pagrįstą šių pikselių x ir y koordinatėmis. Pirmasis iš šių efektų buvo sukurtas naudojant spalvą parenkant sukurtą vertę ir tą pikselį nuspalvinus minėta spalva. Antrasis efektas buvo sukurtas panašiai, tačiau mes taip pat padauginome spalvą iš sukurtos triukšmo vertės. Tai suteikė modeliui tamsesnį efektą. Naudojamas kodas parodytas žemiau:
void Noise2n3 (bool Noisy) {už (int y = 0; y <noiseHeight; y ++) {už (int x = 0; x 8) absNoise = 8; if (Noisy) setNoisyColour (spalvos [absNoise], triukšmas); else setBlockColour (spalvos [absNoise]); TFT ekranas.taškas (x, y); }}} void setNoisyColour (Spalvos spalva, plūduriuojantis triukšmas) {TFTscreen.stroke (spalva.raudona * triukšmas, spalva.žalia * triukšmas, spalva. mėlyna * triukšmas); } void setBlockColour (Spalvos spalva) {TFTscreen.stroke (spalva.raudona, spalva.žalia, spalva.melsva); }
4 žingsnis: atsitiktiniai gradiento efektai
Yra du efektai, kurie sukuria atsitiktinį gradientą. Pirmasis efektas nustato taškus pagal jų rgb spalvą, lėtai perteikiant ekrano gradientą. Antrasis naudoja tuos pačius spalvotus pikselius, kaip ir pirmasis, tačiau juos nustato tam tikra tvarka, sukurdamas įstrižąjį gradientą išilgai ekrano.
Štai pirmasis (pagal spalvas):
void Noise1 () {for (int z = 0; z <3; z ++) {TFTscreen.background (0, 0, 0); int Dabartinė spalva [3] [3] = {{64, 35, 26}, {24, 64, 34}, {20, 18, 64}}; R = dabartinė spalva [z] [0]; G = dabartinė spalva [z] [1]; B = Dabartinė spalva [z] [2]; for (int x = 0; x <128; x ++) {for (int y = 0; y <128; y ++) {int R_Lower = R - ((x+y) / 4); jei (R_Apatinis = 255) {R_Aukštesnis = 254; } int R_Offset = atsitiktinis (R_Apatinis, R_Aukštesnis); int G_Žemesnis = G - ((x + y) / 4); jei (G_Žemesnis = 255) {G_Aukštesnis = 254; } int G_Offset = atsitiktinis (G_Lower, G_Higher); int B_Žemesnis = B - ((x + y) / 4); jei (B_Apatinis <1) {B_Apatinis = 0; } int B_Aukštesnis = B + ((x + y) / 4); jei (B_Aukštesnis> = 255) {B_Aukštesnis = 254; } int B_Offset = atsitiktinis (B_Apatinis, B_Aukštesnis); int mult = 2; jei (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))); }}}}
Ir antrasis (tvarkingesnis efektas):
void Noise4 () {for (int z = 0; z <3; z ++) {TFTscreen.background (0, 0, 0); int Dabartinė spalva [3] [3] = {{64, 35, 26}, {24, 64, 34}, {20, 18, 64}}; R = dabartinė spalva [z] [0]; G = dabartinė spalva [z] [1]; B = Dabartinė spalva [z] [2]; for (int x = 0; x <128; x ++) {for (int y = 0; y <128; y ++) {int R_Lower = R - ((x+y) / 4); jei (R_Apatinis = 255) {R_Aukštesnis = 254; } int R_Offset = atsitiktinis (R_Apatinis, R_Aukštesnis); int G_Žemesnis = G - ((x + y) / 4); jei (G_Žemesnis = 255) {G_Aukštesnis = 254; } int G_Offset = atsitiktinis (G_Lower, G_Higher); int B_Žemesnis = B - ((x + y) / 4); jei (B_Apatinis <1) {B_Apatinis = 0; } int B_Aukštesnis = B + ((x + y) / 4); jei (B_Aukštesnis> = 255) {B_Aukštesnis = 254; } int B_Offset = atsitiktinis (B_Apatinis, B_Aukštesnis); int mult = 2; jei (z == 1) mult = 1; TFTscreen.stroke (R_Offset * mult, G_Offset * mult, B_Offset * mult); TFT ekranas.taškas (x, y); }}}}
5 žingsnis: galutinis rezultatas
Galų gale mes sujungėme šiuos efektus į tam tikrą vaivorykštės „skaidrių demonstraciją“. Norėdami tai pasiekti, mes tiesiog iškvietėme kiekvieną funkciją po kitos tam tikru ciklu:
while (tiesa) {Noise2n3 (false); Triukšmas2n3 (tiesa); TFT ekranas.fonas (0, 0, 0); Triukšmas1 (); Triukšmas4 (); }
Rekomenduojamas:
„Bluetooth“valdomas „Messenger“skystųjų kristalų ekranas -- 16x2 skystųjų kristalų ekranas -- Hc05 -- Paprasta -- Belaidžio ryšio skelbimų lenta: 8 žingsniai
„Bluetooth“valdomas „Messenger“skystųjų kristalų ekranas || 16x2 skystųjų kristalų ekranas || Hc05 || Paprasta || Belaidžio ryšio skelbimų lenta: …………………………. Prenumeruokite mano „YouTube“kanalą, kad gautumėte daugiau vaizdo įrašų …… ………………………………… Skelbimų lenta naudojama žmonėms atnaujinti nauja informacija arba jei norite išsiųsti pranešimą kambaryje arba po
„Arduino Halloween Edition“- „Zombies“iššokantis ekranas (žingsniai su nuotraukomis): 6 žingsniai
„Arduino Halloween Edition“- „Zombies“iššokantis ekranas (žingsniai su paveikslėliais): norite Helovino metu išgąsdinti savo draugus ir sukelti riksmą? O gal tiesiog norite padaryti gerą išdaigą? Šis iššokantis „Zombies“ekranas gali tai padaryti! Šioje instrukcijoje aš išmokysiu jus, kaip lengvai padaryti iššokančius zombius naudojant „Arduino“. HC-SR0
TTGO (spalvotas) ekranas su mikropitonu (TTGO T-ekranas): 6 žingsniai
TTGO (spalvotas) ekranas su „Micropython“(TTGO T-ekranas): „TTGO T-Display“yra plokštė, pagrįsta ESP32, kurioje yra 1,14 colio spalvotas ekranas. Lentą galima nusipirkti už mažesnį nei 7 USD prizą (įskaitant pristatymą, prizas matomas „banggood“). Tai neįtikėtinas prizas už ESP32, įskaitant ekraną. T
„BluBerriSix“- TFT jutiklinis ekranas / „Arduino“pamoka: 12 žingsnių (su paveikslėliais)
„BluBerriSix“- TFT jutiklinis ekranas / „Arduino“pamoka: 2019 m. Yra „RIM Blackberry 850“20 -metis! Šis mažas Kanados išradimas pakeitė pasaulio bendravimo būdą. Jo jau seniai nebėra, bet jo palikimas tęsiasi! Šioje instrukcijoje sužinosite, kaip naudotis MCUfriend.com 2.4 " TFT diskas
Grafikos testas ILI9341 TFT LCD SPI ekranas: 6 žingsniai
Grafikos testas ILI9341 TFT LCD SPI ekranas: 2,8 colio SPI TFT su ILI9341 lustu sujungimas su „Arduino Uno“