Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-23 14:38
Tento duhový projekt jsme vytvořili pomocí různých „hlukových“technik, které vytvářejí kontrolované náhodné efekty. Přidáním nějaké barvy by mohl vzniknout duhový efekt. Používá Arduino Nano a OLED displej 128x128. Účinky jsme zobrazili pomocí knihovny TFT. Použili jsme také některé různé součásti, jako je pečivo a několik drátů.
Krok 1: Zapojení
Nejzákladnějším úkolem bylo zapojení OLED k Arduinu. Připojili jsme GND a VCC k příslušným sběrnicím na desce chleba; SCL na digitální pin 13; SDA na digitální pin 11; RES na digitální pin 8; DC na digitální pin 9; CS na digitální pin 10 a nakonec BL na 3,3 V na Arduinu. Pomocí pinů 5v a GND z Arduina jsme mohli napájet celé prkénko.
Krok 2: Hladký hluk
Po inicializaci požadavků na TFT displej. Abychom vytvořili efekt hladkého šumu, nejprve jsme potřebovali základní funkci šumu. Tím se vrátí relativně náhodná hodnota mezi 0 a 1 na základě předaných hodnot x a y. Je důležité si uvědomit, že počítač nikdy nemůže vytvořit skutečně náhodný výsledek a této náhodnosti je dosaženo pouze změnou čísla co nejvíce, proto velmi velká čí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 pak 'vyhladíme' jinou funkcí. Toho je dosaženo vytvořením hodnoty založené nejen na výsledku ze souřadnic předaných do funkce, ale také na okolních souřadnicích. Výsledkem je, že souřadnice poblíž sebe vytvářejí podobnou hodnotu.
float smoothNoise (float x, float y) {float fractX = x - (int) x; float fractY = y - (int) y; int x1 = ((int) (x) + šířka šumu) % šířka šumu; int y1 = ((int) (y) + noiseHeight) % noiseHeight; int x2 = (x1 + Šířka Šumu - 1) % Šířka Šumu; int y2 = (y1 + noiseHeight - 1) % noiseHeight; float hodnota = 0,0f; hodnota += zlomek X * zlomek Y * šum (x1, y1); hodnota += (1 - zlomek X) * zlomek Y * šum (x2, y1); hodnota += zlomek X * (1 - zlomek Y) * šum (x1, y2); hodnota += (1 - zlomek X) * (1 - zlomek Y) * šum (x2, y2); návratová hodnota; }
Krok 3: Efekty využívající plynulý šum
Díky tomu jsme vytvořili dva efekty. Za tímto účelem jsme prošli každý pixel na OLED a vzali náhodnou hodnotu šumu na základě souřadnic x a y těchto pixelů. První z těchto efektů jsme vytvořili pomocí vygenerované hodnoty pro výběr barvy a zabarvení pixelu výše uvedenou barvou. Druhý efekt byl vytvořen podobným způsobem, ale také jsme barvu vynásobili vygenerovanou hodnotou šumu. To dalo vzoru více stínovaný efekt. Použitý kód je uveden níže:
void Noise2n3 (bool Noisy) {for (int y = 0; y <noiseHeight; y ++) {for (int x = 0; x 8) absNoise = 8; if (Noisy) setNoisyColour (barvy [absNoise], šum); else setBlockColour (barvy [absNoise]); TFTscreen.point (x, y); }}} neplatná sadaNoisyColour (barevná barva, plovoucí šum) {TFTscreen.stroke (color.red * noise, colour.green * noise, colour.blue * noise); } neplatné setBlockColour (barevná barva) {TFTscreen.stroke (colour.red, colour.green, colour.blue); }
Krok 4: Náhodné efekty přechodu
Existují dva efekty, které vytvářejí náhodný přechod. První efekt umístí pixely vzhledem k jejich barvě rgb a pomalu vykreslí přechodový vzor na obrazovku. Druhý používá stejně barevné pixely jako první, ale umisťuje je v pevném pořadí a vytváří diagonální přechod podél obrazovky.
Zde je první (podle barev):
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ální barva [z] [0]; G = aktuální barva [z] [1]; B = aktuální barva [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_Lower = B - ((x + y) / 4); if (B_Lower <1) {B_Lower = 0; } int B_Vyšší = B + ((x + y) / 4); if (B_Higher> = 255) {B_Higher = 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))); }}}}
A druhý (uspořádanější 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ální barva [z] [0]; G = CurrentColour [z] [1]; B = aktuální barva [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_Lower = B - ((x + y) / 4); if (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); if (B_Higher> = 255) {B_Higher = 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); }}}}
Krok 5: Konečný výsledek
Nakonec jsme tyto efekty spojili do jakési „slideshow“duh. Abychom toho dosáhli, jednoduše jsme v cyklu while každou funkci zavolali za druhou:
while (true) {Noise2n3 (false); Noise2n3 (true); TFTscreen.background (0, 0, 0); Noise1 (); Noise4 (); }
Doporučuje:
BrickPi - Rainbow Unicorn: 15 kroků (s obrázky)
BrickPi-Rainbow Unicorn: Zadejte čas výuky Covid a Shelter-in-Place a žádný letní tábor (nejlepší část výukového roku!) Mám páteční lego „klub“s většinou 8–10letých chlapců. Vzhledem k tomu, že se tento klub koná v mimoškolní době poté, co byly tyto děti na sc
Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 kroků (s obrázky)
Arduino & Neopixel Coke Bottle Rainbow Party Light: Takže můj syn Doon si všiml velmi cool párty světla vyrobeného ze starých koksových lahví a mazlavých vnitřků Glow Sticks a ptá se, zda bychom mohli udělat jeden pro jeho nadcházející školní zkoušky jsou u konce Blowout PartAYYY !! ! Říkám jistě, ale nechtěli byste raději něco z toho
Neopixel Ws2812 Duhová LED záře s M5stick-C - Spuštění Rainbow na Neopixelu Ws2812 pomocí M5stack M5stick C pomocí Arduino IDE: 5 kroků
Neopixel Ws2812 Duhová LED záře s M5stick-C | Spuštění Rainbow na Neopixelu Ws2812 pomocí M5stack M5stick C pomocí Arduino IDE: Ahoj, v tomto návodu se naučíme používat LED diody Neopixel ws2812 nebo LED pásek nebo LED matici nebo LED kroužek s vývojovou deskou m5stack m5stick-C s Arduino IDE a vytvoříme s ním duhový vzor
Ovladač Oceania Midi (pro 0-pobřežní a jiné syntetizátory Make Noise): 6 kroků (s obrázky)
Oceania Midi Controller (pro Make Noise 0-Coast a další syntezátory): V posledních několika letech řada výrobců syntetizátorů vydává „stolní semi-modulární“nástroje. Obecně mají stejný tvar jako modulární formát syntetizátoru Eurorack a většina z nich je pravděpodobně zamýšlena jako
Jak vytvořit hodiny v reálném čase pomocí Arduino a TFT displeje - Arduino Mega RTC s 3,5 palcovým TFT displejem: 4 kroky
Jak vyrobit hodiny v reálném čase pomocí Arduino a TFT displeje | Arduino Mega RTC s 3,5 palcovým TFT displejem: Navštivte můj kanál YouTube. Úvod:- V tomto příspěvku vyrobím „Hodiny v reálném čase“pomocí 3,5palcového dotykového displeje TFT LCD, Arduino Mega Modul RTC 2560 a DS3231 …. Před spuštěním … zkontrolujte video z mého kanálu YouTube..Poznámka:- Pokud používáte Arduin