Բովանդակություն:

Arduino TFT Rainbow Noise Display: 5 քայլ
Arduino TFT Rainbow Noise Display: 5 քայլ

Video: Arduino TFT Rainbow Noise Display: 5 քայլ

Video: Arduino TFT Rainbow Noise Display: 5 քայլ
Video: My Top 5 Arduino Displays 2024, Հուլիսի
Anonim
Image
Image
Հարթ աղմուկի օգտագործման էֆեկտներ
Հարթ աղմուկի օգտագործման էֆեկտներ

Մենք ստեղծեցինք ծիածանի այս նախագիծը `օգտագործելով« աղմուկի »տարբեր տեխնիկա, որոնք ստեղծում են վերահսկվող պատահական էֆեկտներ: Որոշ գույն ավելացնելով ՝ կարող էր ծիածանի էֆեկտ ստեղծվել: Այն օգտագործում է Arduino Nano և 128x128 OLED էկրան: Մենք ցուցադրեցինք էֆեկտները ՝ օգտագործելով TFT գրադարանը: Մենք նաև օգտագործեցինք տարբեր բաղադրիչներ, ինչպիսիք են հացի տախտակը և մի քանի լար:

Քայլ 1: Լարերի տեղադրում

Ամենակարևոր խնդիրը OLED- ի Arduino- ին միացումն էր: Մենք GND- ը և VCC- ն միացրեցինք հացի տախտակի համապատասխան ավտոբուսներին. SCL դեպի թվային կապ 13; SDA դեպի թվային PIN 11; RES դեպի թվային կապ 8; DC թվային կապի 9; CS թվային PIN 10 -ին և վերջապես BL- ից մինչև 3.3V Arduino- ում: Arduino- ի 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) + աղմուկ Լայնություն) % աղմուկ Լայնություն; int y1 = ((int) (y) + noiseHeight) % noiseHeight; int x2 = (x1 + աղմուկ Լայնություն - 1) % աղմուկ Լայնություն; int y2 = (y1 + աղմուկԲարձրություն - 1) % աղմուկԲարձրություն; բոց արժեքը = 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 կոորդինատների վրա: Այս էֆեկտներից առաջինը մենք արտադրեցինք ՝ օգտագործելով գեներացված արժեքը ՝ գույն ընտրելու համար, և այդ պիքսելը գունավորեցինք վերը նշված գույնով: Երկրորդ էֆեկտն արտադրվել է նույն ձևով, բայց մենք նաև գույնը բազմապատկել ենք առաջացած աղմուկի արժեքով: Սա օրինաչափությանը տվեց ավելի ստվերավորված ազդեցություն: Օգտագործված ծածկագիրը ներկայացված է ստորև.

դատարկ Noise2n3 (bool Noisy) {for (int y = 0; y <noiseHeight; y ++) {for (int x = 0; x 8) absNoise = 8; եթե (Աղմկոտ) setNoisyColour (գույներ [absNoise], աղմուկ); else setBlockColour (գույներ [absNoise]); TFTscreen.point (x, y); }}} void setNoisyColour (Գույնի գույն, բոց աղմուկ) {TFTscreen.stroke (colour.red * noise, colour.green * աղմուկ, colour.blue * աղմուկ); } void setBlockColour (Գույնի գույն) {TFTscreen.stroke (colour.red, colour.green, colour.blue); }

Քայլ 4: Պատահական գրադիենտային էֆեկտներ

Պատահական գրադիենտային էֆեկտներ
Պատահական գրադիենտային էֆեկտներ
Պատահական գրադիենտային էֆեկտներ
Պատահական գրադիենտային էֆեկտներ
Պատահական գրադիենտային էֆեկտներ
Պատահական գրադիենտային էֆեկտներ

Կան երկու էֆեկտներ, որոնք արտադրում են պատահական գրադիենտ: Առաջին էֆեկտը տեղադրում է պիքսելները նրանց rgb գույնի հետ կապված, դանդաղ դարձնելով գրադիենտ օրինակը էկրանին: Երկրորդը օգտագործում է նույն գույնի պիքսելները, ինչ առաջինը, բայց դրանք տեղադրում է ֆիքսված կարգով ՝ ստեղծելով էկրանի երկայնքով անկյունագծային գրադիենտ:

Ահա առաջինը (գույների հիման վրա).

դատարկ 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); եթե (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))); }}}}

Եվ երկրորդը (ավելի կարգին ազդեցություն).

դատարկ 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); եթե (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: Վերջնական արդյունքը

Ի վերջո, մենք այդ էֆեկտները միավորեցինք մի տեսակ ծիածանների «սլայդ շոուի» մեջ: Դրան հասնելու համար մենք պարզապես յուրաքանչյուր գործառույթ մյուսի հետևից կանվանեցինք մի հանգույց.

իսկ (ճշմարիտ) {Աղմուկ 2n3 (կեղծ); Աղմուկ 2n3 (ճշմարիտ); TFTscreen.background (0, 0, 0); Աղմուկ 1 (); Աղմուկ 4 (); }

Խորհուրդ ենք տալիս: