Мазмұны:

Arduino TFT кемпірқосақ шу дисплейі: 5 қадам
Arduino TFT кемпірқосақ шу дисплейі: 5 қадам

Бейне: Arduino TFT кемпірқосақ шу дисплейі: 5 қадам

Бейне: Arduino TFT кемпірқосақ шу дисплейі: 5 қадам
Бейне: MKS Gen L — Марлин 1 1 9 (configuration.h) 2024, Шілде
Anonim
Image
Image
Тегіс шуды қолданатын әсерлер
Тегіс шуды қолданатын әсерлер

Біз бұл кемпірқосақ жобасын бақыланатын кездейсоқ әсерлер туғызатын түрлі «шу» әдістерін қолдана отырып құрдық. Түсті қосу арқылы кемпірқосақ әсерін алуға болады. Ол Arduino Nano мен 128x128 OLED дисплейді қолданады. Біз эффектілерді TFT кітапханасының көмегімен көрсеттік. Біз сонымен қатар нан тақтасы мен бірнеше сым сияқты әртүрлі компоненттерді қолдандық.

1 -қадам: Сымдарды жалғау

Ең негізгі міндет - OLED -ді Arduino -ға қосу. Біз GND мен VCC -ті нан тақтасындағы тиісті автобустарға қостық; SCL цифрлық пинге 13; SDA цифрлық пинге 11; RES цифрлық пинге 8; Тұрақты ток - цифрлық түйреуіш 9; CS 10 цифрлық түйреуішіне және ақырында Arduino -дағы 3.3 В -қа дейін. Arduino 5v және GND түйреуіштерін қолдана отырып, біз нан тақтасын толық қуаттай алдық.

2 -қадам: тегіс шу

TFT дисплейіне қойылатын талаптарды инициализациялағаннан кейін. Тегіс шу әсерін жасау үшін бізге алдымен негізгі шу функциясы қажет болды. Бұл x және y мәндеріне негізделген 0 мен 1 арасындағы салыстырмалы кездейсоқ мәнді қайтарады. Айта кету керек, компьютер ешқашан кездейсоқ нәтиже бере алмайды, және бұл кездейсоқтыққа мүмкін болатын санды өзгерту арқылы қол жеткізіледі., демек, теңдеудегі өте үлкен сандар.

өзгермелі шу (int x, int y) {int n; n = x + y * 57; n += (n << 13) ^ n; қайтару (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) + шуылдың ені) % шу Ені; int y1 = ((int) (y) + шуыл Биіктігі) % шу Биіктігі; int x2 = (x1 + noiseWidth - 1) % noiseWidth; int y2 = (y1 + noiseHeight - 1) % шуHeight; өзгермелі мән = 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 (Шулы) setNoisyColour (түстер [absNoise], шу); else setBlockColour (түстер [absNoise]); TFTscreen.point (x, y); }}} void setNoisyColour (Түс түсі, өзгермелі шу) {TFTscreen.stroke (colour.red * шу, colour.green * шу, colour.blue * шу); } жарамсыз setBlockColour (Түс түсі) {TFTscreen.stroke (colour.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); егер (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); егер (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 = 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); егер (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); егер (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 (true) {Noise2n3 (false); Noise2n3 (шын); TFTscreen.background (0, 0, 0); Шу1 (); Шу4 (); }

Ұсынылған: