Агуулгын хүснэгт:

Arduino TFT Солонго дуу чимээ дэлгэц: 5 алхам
Arduino TFT Солонго дуу чимээ дэлгэц: 5 алхам

Видео: Arduino TFT Солонго дуу чимээ дэлгэц: 5 алхам

Видео: Arduino TFT Солонго дуу чимээ дэлгэц: 5 алхам
Видео: 1.8" TFT LCD Display module ST7735S 128x160, Обзор 2024, Арваннэгдүгээр
Anonim
Image
Image
Гөлгөр дуу чимээг ашиглах нөлөө
Гөлгөр дуу чимээг ашиглах нөлөө

Бид энэхүү солонгын төслийг янз бүрийн "чимээ шуугиан" техник ашиглан бүтээсэн бөгөөд энэ нь хяналттай санамсаргүй эффектүүдийг бий болгодог. Бага зэрэг өнгө оруулснаар солонгын эффект бий болно. Энэ нь Arduino Nano болон 128x128 OLED дэлгэцийг ашигладаг. Бид TFT номын санг ашиглан эффектүүдийг үзүүлэв. Бид бас талхны самбар, цөөн хэдэн утас гэх мэт төрөл бүрийн бүрэлдэхүүн хэсгүүдийг ашигласан.

Алхам 1: Цахилгааны утас

Хамгийн үндсэн ажил бол OLED -ийг Arduino руу холбох явдал байв. Бид GND болон VCC -ийг талхны тавцан дээрх холбогдох автобусанд холбосон; SCL дижитал зүү 13 хүртэл; SDA тоон зүү 11; RES тоон зүү 8 хүртэл; DC тоон зүү 9; CS -ийг дижитал зүү 10 руу, эцэст нь Arduino дээрх BL -ийг 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) + 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 (Дуу чимээтэй) 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 олон = 2; хэрэв (z == 1) mult = 1; TFTscreen.stroke (R_Offset * олон, G_Offset * олон, B_Offset * олон); 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 олон = 2; хэрэв (z == 1) mult = 1; TFTscreen.stroke (R_Offset * олон, G_Offset * олон, B_Offset * олон); TFTscreen.point (x, y); }}}}

Алхам 5: Эцсийн үр дүн

Эцэст нь бид эдгээр эффектүүдийг солонгын "слайд шоу" болгон нэгтгэв. Үүнд хүрэхийн тулд бид функц бүрийг хэсэг хугацааны дараа ээлжлэн нэрлэв.

while (үнэн) {Noise2n3 (худал); Noise2n3 (үнэн); TFTscreen. background (0, 0, 0); Дуу чимээ1 (); Дуу чимээ4 (); }

Зөвлөмж болгож буй: