সুচিপত্র:

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 ন্যানো এবং একটি 128x128 OLED ডিসপ্লে ব্যবহার করে। আমরা TFT লাইব্রেরি ব্যবহার করে প্রভাব প্রদর্শন করেছি। আমরা কিছু বিবিধ উপাদান যেমন একটি রুটি বোর্ড এবং কয়েকটি তার ব্যবহার করেছি।

ধাপ 1: তারের

সবচেয়ে মৌলিক কাজটি ছিল আরডিনোতে OLED এর ওয়্যারিং। আমরা রুটি বোর্ডে সংশ্লিষ্ট বাসগুলিতে GND এবং VCC সংযুক্ত করেছি; এসসিএল থেকে ডিজিটাল পিন 13; এসডিএ থেকে ডিজিটাল পিন 11; RES থেকে ডিজিটাল পিন 8; ডিসি থেকে ডিজিটাল পিন 9; CS থেকে ডিজিটাল পিন 10 এবং অবশেষে BL থেকে 3.3V Arduino তে। Arduino থেকে 5v এবং GND পিন ব্যবহার করে আমরা পুরো রুটি বোর্ডকে শক্তি দিতে পেরেছি।

ধাপ 2: মসৃণ শব্দ

টিএফটি ডিসপ্লের প্রয়োজনীয়তা আরম্ভ করার পরে। মসৃণ শব্দ প্রভাব তৈরি করতে, আমাদের প্রথমে একটি মৌলিক শব্দ ফাংশন প্রয়োজন। এটি 0 এবং 1 এর মধ্যে অপেক্ষাকৃত এলোমেলো মান প্রদান করে x এবং y- এর উপর ভিত্তি করে।, তাই সমীকরণে খুব বড় সংখ্যা।

ভাসমান শব্দ (int x, int y) {int n; n = x + y * 57; n += (n << 13) ^ n; return (1.0 - ((n * ((n * n * 15731) + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); }

আমরা তারপর অন্য ফাংশন সঙ্গে শব্দ 'মসৃণ'। এটি ফাংশনে প্রবেশ করা স্থানাঙ্ক থেকে প্রাপ্ত ফলাফলের উপর ভিত্তি করে একটি মান তৈরি করে অর্জন করা হয়, তবে পার্শ্ববর্তী স্থানাঙ্কগুলিও। এর ফলস্বরূপ, একে অপরের কাছাকাছি স্থানাঙ্কগুলি অনুরূপ মান উৎপন্ন করে।

ভাসা smoothNoise (float x, float y) {float fractX = x - (int) x; ভাসা ভগ্নাংশ = 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: মসৃণ শব্দ ব্যবহার করে প্রভাব

মসৃণ শব্দ ব্যবহার করে প্রভাব
মসৃণ শব্দ ব্যবহার করে প্রভাব

এটি দিয়ে আমরা দুটি প্রভাব তৈরি করেছি। এটি করার জন্য, আমরা ওএলইডি -তে প্রতিটি পিক্সেলের মাধ্যমে লুপ করেছি এবং এই পিক্সেলের x এবং y স্থানাঙ্কের উপর ভিত্তি করে একটি এলোমেলো শব্দ মূল্য গ্রহণ করেছি। এই প্রভাবগুলির মধ্যে প্রথমটি আমরা একটি রং বাছার জন্য উৎপন্ন মান ব্যবহার করে উত্পাদিত, এবং উপরের পিক্সেলটিকে পূর্বোক্ত রঙ দিয়ে রঙ করেছি। দ্বিতীয় প্রভাবটি একইভাবে উত্পাদিত হয়েছিল, তবে আমরা উত্পন্ন শব্দ মান দ্বারা রঙকেও গুণ করেছি। এটি প্যাটার্নটিকে আরও ছায়াময় প্রভাব দিয়েছে। ব্যবহৃত কোড নীচে দেখানো হয়েছে:

void Noise2n3 (bool Noisy) {for (int y = 0; y <noiseHeight; y ++) {for (int x = 0; x 8) absNoise = 8; যদি (গোলমাল) setNoisyColour (রং [absNoise], গোলমাল); অন্যথায় 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: এলোমেলো গ্রেডিয়েন্ট প্রভাব

এলোমেলো গ্রেডিয়েন্ট প্রভাব
এলোমেলো গ্রেডিয়েন্ট প্রভাব
এলোমেলো গ্রেডিয়েন্ট প্রভাব
এলোমেলো গ্রেডিয়েন্ট প্রভাব
এলোমেলো গ্রেডিয়েন্ট প্রভাব
এলোমেলো গ্রেডিয়েন্ট প্রভাব

দুটি প্রভাব রয়েছে যা একটি এলোমেলো গ্রেডিয়েন্ট তৈরি করে। প্রথম প্রভাব পিক্সেলগুলিকে তাদের আরজিবি রঙের সাথে সম্পর্কিত করে, ধীরে ধীরে পর্দায় একটি গ্রেডিয়েন্ট প্যাটার্ন রেন্ডার করে। দ্বিতীয়টি প্রথমটির মতো একই রঙের পিক্সেল ব্যবহার করে, কিন্তু সেগুলি একটি নির্দিষ্ট ক্রমে রাখে, স্ক্রিন বরাবর একটি তির্যক গ্রেডিয়েন্ট তৈরি করে।

এখানে প্রথম (রঙের উপর ভিত্তি করে):

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]; বি = কারেন্ট কালার [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); যদি (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]; বি = কারেন্ট কালার [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); যদি (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 (); Noise4 (); }

প্রস্তাবিত: