
Съдържание:
2025 Автор: John Day | [email protected]. Последно модифициран: 2025-01-23 14:36



Създадохме този проект на дъгата, използвайки различни техники за „шум“, които създават контролирани случайни ефекти. Като добавите малко цвят, може да се получи ефект на дъга. Той използва Arduino Nano и 128x128 OLED дисплей. Показахме ефектите с помощта на TFT библиотеката. Използвахме и някои различни компоненти като дъска за хляб и няколко жици.
Стъпка 1: Окабеляване
Най -основната задача беше свързването на OLED към Arduino. Свързахме GND и VCC със съответните автобуси на дъската за хляб; SCL към цифров пин 13; SDA към цифров пин 11; RES към цифров пин 8; DC към цифров пин 9; CS към цифров пин 10 и накрая BL до 3.3V на Arduino. Използвайки щифтовете 5v и GND от Arduino, успяхме да захранваме цялата дъска за хляб.
Стъпка 2: Плавен шум
След инициализиране на изискванията за TFT дисплея. За да създадем плавен шумов ефект, първо се нуждаехме от основна шумова функция. Това връща относително случайна стойност между 0 и 1 въз основа на предадените стойности x и y. Важно е да се отбележи, че компютърът никога не може да произведе наистина случаен резултат и тази случайност се постига само чрез промяна на числото, доколкото е възможно, оттук и много големите числа в уравнението.
плаващ шум (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); }
След това „изглаждаме“шума с друга функция. Това се постига чрез създаване на стойност, базирана не само на резултата от координатата, предадена във функцията, но и на околните координати. В резултат на това координатите в близост една до друга произвеждат подобна стойност.
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; плаваща стойност = 0.0f; стойност += fractX * fractY * шум (x1, y1); стойност += (1 - fractX) * fractY * шум (x2, y1); стойност += fractX * (1 - fractY) * шум (x1, y2); стойност += (1 - fractX) * (1 - fractY) * шум (x2, y2); възвращаема стойност; }
Стъпка 3: Ефекти, използващи плавен шум

С това създадохме два ефекта. За да направим това, претърсихме всеки пиксел на OLED и взехме произволна стойност на шума въз основа на координатите x и y на тези пиксели. Първият от тези ефекти произведохме, като използваме генерираната стойност, за да изберем цвят, и оцветихме този пиксел с гореспоменатия цвят. Вторият ефект беше произведен по подобен начин, но също така умножихме цвета по генерираната стойност на шума. Това даде на модела по -засенчен ефект. Използваният код е показан по -долу:
void Noise2n3 (bool Noisy) {for (int y = 0; y <noiseHeight; y ++) {for (int x = 0; x 8) absNoise = 8; if (Noisy) setNoisyColour (цветове [absNoise], шум); else setBlockColour (цветове [absNoise]); TFTscreen.point (x, y); }}} void setNoisyColour (Цветен цвят, плаващ шум) {TFTscreen.stroke (color.red * шум, colour.green * шум, color.blue * шум); } void setBlockColour (цветен цвят) {TFTscreen.stroke (color.red, colour.green, colour.blue); }
Стъпка 4: Случайни градиентни ефекти



Има два ефекта, които произвеждат случаен градиент. Първият ефект поставя пикселите спрямо техния rgb цвят, бавно изобразявайки градиентен модел към екрана. Вторият използва същите цветни пиксели като първия, но ги поставя във фиксиран ред, създавайки диагонален градиент по екрана.
Ето първото (въз основа на цветовете):
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 = CurrentColour [z] [0]; G = CurrentColour [z] [1]; B = CurrentColour [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 = произволен (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); ако (G_Lower = 255) {G_Higher = 254; } int G_Offset = произволен (G_Lower, G_Higher); int B_Lower = B - ((x + y) / 4); ако (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); if (B_Higher> = 255) {B_Higher = 254; } int B_Offset = произволен (B_Lower, B_Higher); int mult = 2; ако (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))); }}}}
И второто (по -подреден ефект):
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 = CurrentColour [z] [0]; G = Текущ цвят [z] [1]; B = CurrentColour [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 = произволен (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); ако (G_Lower = 255) {G_Higher = 254; } int G_Offset = произволен (G_Lower, G_Higher); int B_Lower = B - ((x + y) / 4); ако (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); if (B_Higher> = 255) {B_Higher = 254; } int B_Offset = произволен (B_Lower, B_Higher); int mult = 2; ако (z == 1) mult = 1; TFTscreen.stroke (R_Offset * mult, G_Offset * mult, B_Offset * mult); TFTscreen.point (x, y); }}}}
Стъпка 5: Крайният резултат
В крайна сметка комбинирахме тези ефекти в нещо като „слайдшоу“на дъгите. За да постигнем това, просто извикахме всяка функция след друга в цикъл while:
while (true) {Noise2n3 (false); Noise2n3 (вярно); TFTscreen.background (0, 0, 0); Шум1 (); Шум4 (); }
Препоръчано:
Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 стъпки (със снимки)

Arduino & Neopixel Coke Bottle Rainbow Party Light: Така че синът ми Doon забелязва много готина светлинка за парти, направена от стари бутилки кокс и гъстата вътрешност на Glow Sticks, и пита дали можем да направим такава за предстоящите му училищни изпити са над Blowout PartAYYY !! ! Казвам със сигурност, но не бихте ли предпочели да вземете нещо от тях
Usare Un Display Grande a 4 Cifre 8886 Display Con Wemos ESP8266 Arduino NodeMCU: 6 стъпки

Usare Un Display Grande a 4 Cifre 8886 Display Con Wemos ESP8266 Arduino NodeMCU: Questo progetto e un semplice esempio che mostra come collegre and display del tipo 8886 -Display e, per comodità nostra, un Wemos D1 - ma needbe essere un ArduinoU un Node o qualsiasi altro microcontrollore che state usando per un progetto.Esi
Neopixel Ws2812 Rainbow LED Glow с M5stick-C - Стартиране на Rainbow на Neopixel Ws2812 Използване на M5stack M5stick C Използване на Arduino IDE: 5 стъпки

Neopixel Ws2812 Rainbow LED Glow с M5stick-C | Изпълнение на Rainbow на Neopixel Ws2812 Използване на M5stack M5stick C Използване на Arduino IDE: Здравейте момчета в тази инструкция ще се научим как да използваме неопиксели ws2812 светодиоди или LED лента или LED матрица или LED пръстен с m5stack m5stick-C платка за разработка с Arduino IDE и ние ще направим модел на дъга с него
Океания Midi контролер (за Make Noise 0-Coast и други синтезатори): 6 стъпки (със снимки)

Океания Midi контролер (за Make Noise 0-Coast и други синтезатори): През последните няколко години редица производители на синтезатори пускат " настолни полу-модулни " инструменти. Те обикновено приемат същия форм -фактор като формата на модулния синтезатор на Eurorack и повечето вероятно са предназначени като g
Как да направите часовник в реално време с помощта на Arduino и TFT дисплей - Arduino Mega RTC с 3,5 -инчов TFT дисплей: 4 стъпки

Как да си направим часовник в реално време, използвайки Arduino и TFT дисплей | Arduino Mega RTC с 3,5-инчов TFT дисплей: Посетете моя канал в Youtube. Въведение:- В този пост ще направя „Часовник в реално време“, използвайки 3,5-инчов TFT сензорен LCD, Arduino Mega 2560 и DS3231 RTC модул … .Преди да започнете … проверете видеоклипа от моя канал в YouTube .. Забележка:- Ако използвате Arduin