Мазмуну:

Arduino TFT Rainbow ызы -чуу дисплейи: 5 кадам
Arduino TFT Rainbow ызы -чуу дисплейи: 5 кадам

Video: Arduino TFT Rainbow ызы -чуу дисплейи: 5 кадам

Video: Arduino TFT Rainbow ызы -чуу дисплейи: 5 кадам
Video: Raspberry pi 5 inch HDMI Screen Installation | #Shorts 2024, Июль
Anonim
Image
Image
Жылмакай ызы -чууну колдонуу эффекттери
Жылмакай ызы -чууну колдонуу эффекттери

Биз бул асан -үсөн долбоорун башкарылган туш келди эффекттерди жаратуучу ар кандай "ызы -чуу" ыкмаларын колдонуу менен түздүк. Кээ бир түс кошуу менен, асан -үсөн эффекти өндүрүлүшү мүмкүн. Бул Arduino Nano жана 128x128 OLED дисплейин колдонот. Биз эффекттерди TFT китепканасынын жардамы менен көрсөттүк. Биз ошондой эле нан тактасы жана бир нече зымдар сыяктуу кээ бир башка компоненттерди колдондук.

1 -кадам: Кабелдөө

Эң негизги тапшырма OLEDдин Arduinoго туташуусу болду. Биз GND жана VCCди нан тактасындагы тиешелүү автобустарга туташтырдык; SCL санарип пинге 13; SDA санарип пинге 11; Санарип пин 8ге RES; Санариптик пинге 9 DC; CS 10 цифралык пинге жана акыры BLD 3.3V 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) % noiseHeight; калкыма мааниси = 0.0f; мааниси += fractX * fractY * ызы -чуу (x1, y1); мааниси += (1 - fractX) * fractY * ызы -чуу (x2, y1); мааниси += fractX * (1 - fractY) * ызы -чуу (x1, y2); мааниси += (1 - fractX) * (1 - fractY) * ызы -чуу (x2, y2); кайтарым наркы; }

3 -кадам: Effects Smooth Noise колдонуу

Жылмакай ызы -чууну колдонуу эффекттери
Жылмакай ызы -чууну колдонуу эффекттери

Муну менен биз эки эффект түздүк. Бул үчүн биз 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); }}} боштук setNoisyColour (Түс түсү, калкып чыккан ызы -чуу) {TFTscreen.stroke (colour.red * ызы -чуу, colour.green * ызы -чуу, colour.blue * ызы -чуу); } жараксыз setBlockColour (Түс түсү) {TFTscreen.stroke (colour.red, colour.green, colour.blue); }

4 -кадам: Random Gradient Effects

Random Gradient Effects
Random Gradient Effects
Random Gradient Effects
Random Gradient Effects
Random Gradient Effects
Random Gradient Effects

Кокус градиентти чыгаруучу эки эффект бар. Биринчи эффект пикселдерди 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); if (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; 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)))); }}}}

Ал эми экинчиси (тартиптүү эффект):

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); if (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; if (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); Noise1 (); Noise4 (); }

Сунушталууда: