فهرست مطالب:

Arduino TFT Rainbow Noise Display: 5 مرحله
Arduino TFT Rainbow Noise Display: 5 مرحله

تصویری: Arduino TFT Rainbow Noise Display: 5 مرحله

تصویری: Arduino TFT Rainbow Noise Display: 5 مرحله
تصویری: Can You Reattach a Severed Finger? 🤔 2024, جولای
Anonim
Image
Image
اثرات با استفاده از صدای صاف
اثرات با استفاده از صدای صاف

ما این پروژه رنگین کمان را با استفاده از تکنیک های مختلف "سر و صدا" ایجاد کردیم که جلوه های تصادفی کنترل شده را ایجاد می کند. با افزودن مقداری رنگ می توان جلوه رنگین کمان ایجاد کرد. از آردوینو نانو و صفحه نمایش 128x128 OLED استفاده می کند. ما جلوه ها را با استفاده از کتابخانه TFT نمایش دادیم. ما همچنین از برخی اجزای متفرقه مانند تخته نان و چند سیم استفاده کردیم.

مرحله 1: سیم کشی

اساسی ترین کار سیم کشی OLED به آردوینو بود. ما GND و VCC را به اتوبوس های مربوطه روی تخته نان متصل کردیم. SCL به پین دیجیتال 13 ؛ SDA به پین دیجیتال 11 ؛ RES به پین دیجیتال 8 ؛ DC به پین دیجیتال 9 ؛ CS به پین دیجیتال 10 و در نهایت BL تا 3.3V در آردوینو. با استفاده از پین های 5v و GND از آردوینو ، توانستیم تمام تخته نان را تغذیه کنیم.

مرحله 2: نویز صاف

پس از آماده سازی الزامات برای صفحه نمایش TFT. برای ایجاد جلوه صاف صاف ، ابتدا به یک تابع نویز اساسی نیاز داشتیم. این مقدار نسبتاً تصادفی بین 0 و 1 را بر اساس مقادیر x و y ارسال می کند. توجه به این نکته ضروری است که رایانه هرگز نمی تواند یک نتیجه واقعی تصادفی ایجاد کند ، و این تصادفی بودن فقط با تغییر تعداد تا آنجا که ممکن است به دست می آید. ، از این رو اعداد بسیار بزرگ در معادله.

نویز شناور (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 ؛ مقدار += فراتکس * فراکتي * سر و صدا (x1 ، y1) ؛ مقدار += (1 - فراتکس) * سر و صدا فراکتی * (x2 ، y1) ؛ مقدار += fractX * (1 - fractY) * سر و صدا (x1 ، y2) ؛ مقدار += (1 - fractX) * (1 - فراکتای) * سر و صدا (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 (colour.red * noise، colour.green * noise، colour.blue * noise) ؛ } void 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] ؛ برای (int x = 0 ؛ x <128؛ x ++) {برای (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) ؛ 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 = CurrentColour [z] [1] ؛ B = CurrentColour [z] [2] ؛ برای (int x = 0 ؛ x <128؛ x ++) {برای (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) ؛ 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 فراخوانی می کنیم:

در حالی که (درست) {Noise2n3 (false) ؛ Noise2n3 (درست) ؛ TFTscreen.background (0 ، 0 ، 0) ؛ سر و صدا 1 ()؛ سر و صدا 4 ()؛ }

توصیه شده: