
Мазмуну:
2025 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2025-01-23 14:51



Биз бул асан -үсөн долбоорун башкарылган туш келди эффекттерди жаратуучу ар кандай "ызы -чуу" ыкмаларын колдонуу менен түздүк. Кээ бир түс кошуу менен, асан -үсөн эффекти өндүрүлүшү мүмкүн. Бул 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



Кокус градиентти чыгаруучу эки эффект бар. Биринчи эффект пикселдерди 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 (); }
Сунушталууда:
TFT LCD дисплейи менен жөнөкөй аба сапатын көзөмөлдөө- Ameba Arduino: 3 кадам

TFT ЖК дисплейи менен жөнөкөй абанын мониторинги-Ameba Arduino: Киришүү Азыр адамдардын көпчүлүгү потенциалдуу COVID-19 вирус ташуучусу менен тыгыз байланышта болбоо үчүн үйдө калышкандыктан, абанын сапаты адамдардын жыргалчылыгынын маанилүү факторуна айланат, айрыкча тропикалык өлкөлөрдө кондиционерди колдонуу бул мезгилде сөзсүз керек
TFT дисплейи бар Arduino RFID Reader: 7 кадам

TFT дисплейи бар Arduino RFID окурманы: Мен сизге TFT дисплейи менен дубалга орнотуу үчүн жакшы көрүнгөн RFID окурманын кантип жасоо керектигин көрсөтөм. Сиз тандаган MKR жана биздин Ар
Arduino жана TFT дисплейин колдонуу менен кантип реалдуу убакытты жасоо керек - Arduino Mega RTC 3.5 дюймдук TFT дисплейи менен: 4 кадам

Arduino жана TFT дисплейин колдонуу менен кантип реалдуу убакытты жасоо керек | 3.5 дюймдук TFT дисплейи бар Arduino Mega RTC: Менин Youtube каналыма баш багыңыз:- Бул постто мен 3,5 дюймдук TFT сенсордук ЖК, "Arduino Mega" менен "Реалдуу убакыт саатын" жасайм. 2560 жана DS3231 RTC модулу …. .Баштар алдында… менин YouTube каналымдагы видеону текшериңиз .. Эскертүү:- Эгерде сиз Arduin колдонуп жатсаңыз
Rainbow Shadow музейинин дисплейи: 10 кадам (сүрөттөр менен)

Rainbow Shadow музейинин дисплейи: Менин мектебим музейдин, Батыш илим борборунда жайгашкан. WSC алмаз өрөөнүнүн суу сактагычын түзүүдө казылган муз доорундагы жандыктардын (мамонт, мастодон, жалкоолор ж. Б.) Сөөктөрүнө ээ. Мектепте " Музей дисковеси
Графикалык тест ILI9341 TFT LCD SPI дисплейи: 6 кадам

Графикалык тест ILI9341 TFT LCD SPI дисплейи: Arduino Uno үчүн ILI9341 чипи бар 2,8 дюймдук SPI TFT интерфейси