Obsah:
- Krok 1: Zapojenie
- Krok 2: Hladký hluk
- Krok 3: Efekty používajúce plynulý šum
- Krok 4: Náhodné efekty gradientu
- Krok 5: Konečný výsledok
Video: Arduino TFT Rainbow Noise Display: 5 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:58
Tento dúhový projekt sme vytvorili pomocou rôznych 'hlukových' techník, ktoré vytvárajú kontrolované náhodné efekty. Pridaním nejakej farby môže dôjsť k dúhovému efektu. Používa displej Arduino Nano a 128 x 128 OLED. Účinky sme zobrazili pomocou knižnice TFT. Použili sme tiež niekoľko rôznych komponentov, ako je doska na chlieb a niekoľko drôtov.
Krok 1: Zapojenie
Najzákladnejšou úlohou bolo zapojenie OLED do Arduina. Pripojili sme GND a VCC k príslušným zberniciam na doske s chlebom; SCL na digitálny pin 13; SDA na digitálny pin 11; RES na digitálny pin 8; DC na digitálny pin 9; CS na digitálny pin 10 a nakoniec BL na 3,3 V na Arduine. Pomocou pinov 5v a GND z Arduina sme mohli napájať celú dosku na chlieb.
Krok 2: Hladký hluk
Po inicializácii požiadaviek na TFT displej. Aby sme vytvorili efekt hladkého hluku, najskôr sme potrebovali základnú funkciu šumu. Tým sa vráti relatívne náhodná hodnota medzi 0 a 1 na základe odovzdaných hodnôt x a y. Je dôležité poznamenať, že počítač nikdy nemôže vytvoriť skutočne náhodný výsledok a táto náhodnosť sa dosiahne iba zmenou čísla čo najviac., preto veľmi veľké čísla v rovnici.
float noise (int x, int y) {int n; n = x + y * 57; n += (n << 13) ^ n; návrat (1,0 - ((n * ((n * n * 15731) + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); }
Hluk potom „vyhladíme“inou funkciou. To sa dosiahne vytvorením hodnoty založenej nielen na výsledku zo súradnice odovzdanej do funkcie, ale aj na okolitých súradniciach. Výsledkom je, že súradnice blízko seba produkujú podobnú hodnotu.
float smoothNoise (float x, float y) {float fractX = x - (int) x; float fractY = y - (int) y; int x1 = ((int) (x) + šírka šumu) % šírka šumu; int y1 = ((int) (y) + výška hluku) % výška hluku; int x2 = (x1 + šírka šumu - 1) % šírka šumu; int y2 = (y1 + hladina hluku - 1) % výška hluku; plávajúca hodnota = 0,0f; hodnota += zlomok X * zlomok Y * šum (x1, y1); hodnota += (1 - zlomok X) * zlomok Y * šum (x2, y1); hodnota += fractX * (1 - fractY) * šum (x1, y2); hodnota += (1 - zlomok X) * (1 - zlomok Y) * šum (x2, y2); návratová hodnota; }
Krok 3: Efekty používajúce plynulý šum
Vďaka tomu sme vytvorili dva efekty. Aby sme to urobili, previedli sme každý pixel na OLED a urobili sme náhodnú hodnotu šumu na základe súradníc x a y týchto pixelov. Prvý z týchto efektov sme vytvorili pomocou vygenerovanej hodnoty na výber farby a zafarbenie daného pixelu vyššie uvedenou farbou. Druhý efekt bol vytvorený podobným spôsobom, ale taktiež sme farbu znásobili vygenerovanou hodnotou šumu. Vďaka tomu mal vzor zatienenejší efekt. Použitý kód je uvedený nižšie:
void Noise2n3 (bool Noisy) {for (int y = 0; y <noiseHeight; y ++) {for (int x = 0; x 8) absNoise = 8; if (Noisy) setNoisyColour (farby [absNoise], hluk); else setBlockColour (farby [absNoise]); TFTscreen.point (x, y); }}} sada neplatných farieb } neplatné setBlockColour (farebná farba) {TFTscreen.stroke (colour.red, colour.green, colour.blue); }
Krok 4: Náhodné efekty gradientu
Existujú dva efekty, ktoré vytvárajú náhodný gradient. Prvý efekt priraďuje pixely k ich farbe rgb a pomaly vykresľuje na obrazovku gradientový vzor. Druhý používa rovnako farebné pixely ako prvý, ale umiestňuje ich v pevnom poradí a vytvára diagonálny prechod pozdĺž obrazovky.
Tu je prvý (podľa farieb):
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 = aktuálna farba [z] [0]; G = aktuálna farba [z] [1]; B = aktuálna farba [z] [2]; pre (int x = 0; x <128; x ++) {pre (int y = 0; y <128; y ++) {int R_Lower = R - ((x+y) / 4); if (R_Lower = 255) {R_Higher = 254; } int R_Offset = random (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); if (G_Lower = 255) {G_Higher = 254; } int G_Offset = random (G_Lower, G_Higher); int B_Spodne = B - ((x + y) / 4); if (B_Lower <1) {B_Lower = 0; } int B_Vyssie = B + ((x + y) / 4); if (B_Higher> = 255) {B_Higher = 254; } int B_Offset = random (B_Lower, B_Higher); int mult = 2; ak (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))); }}}}
A druhý (usporiadanejší efekt):
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 = aktuálna farba [z] [0]; G = aktuálna farba [z] [1]; B = aktuálna farba [z] [2]; for (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 = random (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); if (G_Lower = 255) {G_Higher = 254; } int G_Offset = random (G_Lower, G_Higher); int B_Spodne = B - ((x + y) / 4); if (B_Lower <1) {B_Lower = 0; } int B_Vyssie = B + ((x + y) / 4); if (B_Higher> = 255) {B_Higher = 254; } int B_Offset = random (B_Lower, B_Higher); int mult = 2; ak (z == 1) mult = 1; TFTscreen.stroke (R_Offset * mult, G_Offset * mult, B_Offset * mult); TFTscreen.point (x, y); }}}}
Krok 5: Konečný výsledok
Nakoniec sme tieto efekty spojili do akejsi „prezentácie“dúh. Aby sme to dosiahli, jednoducho sme v slučke chvíľu zavolali každú funkciu za druhou:
while (true) {Noise2n3 (false); Noise2n3 (true); TFTscreen.background (0, 0, 0); Noise1 (); Noise4 (); }
Odporúča:
Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 krokov (s obrázkami)
Arduino & Neopixel Coke Bottle Rainbow Party Light: Takže môj syn Doon si všimol veľmi chladné svetlo na párty vyrobené zo starých koksových fliaš a mazľavých vnútorností Glow Sticks a pýta sa, či by sme ho mohli vyrobiť aj pre jeho nadchádzajúce školské skúšky. ! Hovorím určite, ale nedali by ste si radšej niečo z toho
Kalkulačka dotykového displeja TFT LCD Arduino TFT: 3 kroky
Arduino TFT LCD dotyková kalkulačka: Ahoj, chlapci, v tomto návode sa naučíme, ako vytvoriť kalkulačku pomocou Arduino Uno s 3,5 " TFT LCD dotykový displej. Napíšte teda kód a nahrajte ho do arduina, ktoré na displeji zobrazí rozhranie kalkulačky a
Neopixel Ws2812 Rainbow LED žiara s M5stick-C - Spustenie Rainbow na Neopixeli Ws2812 pomocou M5stack M5stick C pomocou Arduino IDE: 5 krokov
Neopixel Ws2812 Rainbow LED žiara s M5stick-C | Spustenie Rainbow na Neopixel Ws2812 pomocou M5stack M5stick C pomocou Arduino IDE: Ahoj, v tomto návode sa naučíme používať LED diódy Neopixel ws2812 alebo LED pás alebo LED maticu alebo LED krúžok s vývojovou doskou m5stack m5stick-C s Arduino IDE a vyrobíme s ním dúhový vzor
Ovládač Oceania Midi (pre 0-pobrežné a iné syntetizátory Make Noise): 6 krokov (s obrázkami)
Ovládač Oceania Midi (pre zvuk 0-Coast a iné syntetizátory Make Noise): V posledných rokoch niekoľko výrobcov syntetizátorov vydáva „desktop semi-modular“nástrojov. Spravidla majú rovnaký tvar ako modulárny formát syntetizátora Eurorack a väčšina z nich je pravdepodobne zamýšľaná ako
Ako vytvoriť hodiny v reálnom čase pomocou displeja Arduino a TFT - Arduino Mega RTC s 3,5 palcovým TFT displejom: 4 kroky
Ako vytvoriť hodiny v reálnom čase pomocou Arduino a TFT displeja | Arduino Mega RTC s 3,5 palcovým TFT displejom: Navštívte môj kanál YouTube. Úvod:- V tomto príspevku urobím „Hodiny v reálnom čase“pomocou 3,5 palcového dotykového TFT LCD displeja, Arduino Mega Modul RTC 2560 a DS3231 …. Pred spustením … si pozrite video z môjho kanála YouTube..Poznámka:- Ak používate Arduin