Სარჩევი:

NeoPixels Matrix : გველი თამაში: 4 ნაბიჯი
NeoPixels Matrix : გველი თამაში: 4 ნაბიჯი

ვიდეო: NeoPixels Matrix : გველი თამაში: 4 ნაბიჯი

ვიდეო: NeoPixels Matrix : გველი თამაში: 4 ნაბიჯი
ვიდეო: LED Snake using NeoPixel 2024, ნოემბერი
Anonim
NeoPixels Matrix : გველის თამაში
NeoPixels Matrix : გველის თამაში

კიდევ გახსოვთ გველის თამაში, რომელსაც ბავშვობაში ვთამაშობდით ჩვენს სათამაშო ყუთზე ან მობილურზე? დღეს ჩვენ ვისწავლით თუ როგორ უნდა გავაკეთოთ გველის თამაში 8*8 NeoPixels მატრიქსით. ჩვენ ვირჩევთ Arduino uno როგორც საკონტროლო ცენტრს და Joystick ბრეაკოუტ მოდულს გველის გასაკონტროლებლად.

ნაბიჯი 1: კომპონენტების სია:

აპარატურა:

1 X Freaduino UNO Rev2.2 MB_EFUNO

1 X მოქნილი 64 RGB LED 8*8 NeoPixels მატრიცა

1 X ჯოისტიკის გარღვევის მოდული BKOUT_MD01

3 X გზამკვლევი ხაზი

პროგრამული უზრუნველყოფა:

Arduino IDE

ნაბიჯი 2: აპარატურის კავშირი

დაუკავშირეთ NeoPixels პინ D2- ს.

"X" ჯოისტიკის გარღვევის მოდულზე დააკავშირეთ pin A0 Arduino UNO დაფაზე, "Y" დააკავშირეთ pin A1, "K" დააკავშირეთ pin A2.

ნაბიჯი 3: პროგრამირება

P#მოიცავს

#განსაზღვრეთ PIN 2 // გამოყვანის პინი #განსაზღვრეთ MAX_LED 64 // მძივის რაოდენობა uint32_t c; int a = 0, ნომერი; ხელმოუწერელი char huan = 0, ci = 0; ხელმოუწერელი char u = 40; // სიტყვათა ჯგუფის შრიფტის ზომა ხელმოუწერელი char x = 0; ხელმოუწერელი char ფერი [3]; ხელმოუწერელი char go = {2, 3, 4, 5, 9, 14, 17, 20, 22, 26, 27, 29, 34, 35, 36, 37, 41, 46, 49, 54, 58, 59, 60, 61}; // 24 ხელმოუწერელი შუქნიშანი [8] [8] = {{0, 1, 2, 3, 4, 5, 6, 7}, {15, 14, 13, 12, 11, 10, 9, 8}, {16, 17, 18, 19, 20, 21, 22, 23}, {31, 30, 29, 28, 27, 26, 25, 24}, {32, 33, 34, 35, 36, 37, 38, 39}, {47, 46, 45, 44, 43, 42, 41, 40}, {48, 49, 50, 51, 52, 53, 54, 55}, {63, 62, 61, 60, 59, 58, 57, 56},}; ხელმოუწერელი char სიმბოლო [8] = // დააყენეთ სიტყვა გასაგზავნად {{0, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 0}, // 0 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, // 1 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 1, 1, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 2 {0, 1, 1, 1, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 3 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, // 4 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 5 {0, 1, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 6 {0, 1, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, // 7 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 8 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 1, 0, 0}, // 9 {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0 },}; ხელმოუწერელი char მონიტორის ქულა [8] [8]; int სიჩქარე S = 400; // გველის საწყისი სიჩქარე int ანგარიშით; // თამაშის ქულა int xValue; // JoyStick-X int yValue; // JoyStick-Y int zValue; // JoyStick-Z int FX, FY; // კვების კოორდინატი int SX, SY; // გველის თავის კოორდინატი int KEY, K; int ჩართულია; // თამაშის char sx გადატვირთვის ჩართვა [64]; // გველის სხეულის char sy [64]; Adafruit_NeoPixel ზოლები = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); void RANDOM () {A: FX = შემთხვევითი (0, 7); FY = შემთხვევითი (0, 7); for (int i = 0; i <3+ქულა; i ++) // გველის სხეულზე საკვების ჩვენების თავიდან აცილება {if (FX == sx && FY == sy ) goto A; }} void myDelay (ხელმოუწერელი დრო int) {// გველის გადაადგილების დაგვიანებულ პერიოდში, ჩვენ უნდა გავაკეთოთ საკვების ბრჭყვიალა და წავიკითხოთ Joystick– ის მიმართულება (int t = 1; t 950 && KEY! = 5) { K = 8; } else if (yValue <50 && KEY! = 8) {K = 5; } else if (xValue 950 && KEY! = 4) {K = 6; }} // აქ შეგიძლიათ შეადაროთ არის თუ არა კლავიატურის მიმართულება გველის მოძრაობის მიმართულების საპირისპირო. თუ ის საპირისპიროა, მაშინ უარი თქვით კლავიატურაზე. /********************************************** *********************************************** *********************************************** *********************************************** ********/ void gameover () {// როდესაც Gameover პროგრამა შეჩერდება, დააჭირეთ ცენტრალურ ღილაკს თამაშის დასაწყებად. ხელმოუწერელი char ღირებულება, y; ფერი [0] = შემთხვევითი (3, 18); // ფერის დაყენება. პარამეტრი არის R G B, დიაპაზონი 0-255. ფერი [1] = შემთხვევითი (3, 18); ფერი [2] = შემთხვევითი (3, 18); c = ზოლები. ფერი (ფერი [1], ფერი [0], ფერი [2]); მნიშვნელობა = ქულა / 10; მნიშვნელობა = მნიშვნელობა * 4; y = 0; for (რიცხვი = მნიშვნელობა; ნომერი <მნიშვნელობა+4; ნომერი ++) {for (ხელმოუწერელი სიმბოლო ვერტიკალური = 0; ვერტიკალური <8; ვერტიკალური ++) {ჩვენების ქულა [y] [ვერტიკალური] = სიმბოლო [ნომერი] [ვერტიკალური]; } y ++; } მნიშვნელობა = ქულა % 10; მნიშვნელობა = მნიშვნელობა * 4; for (რიცხვი = მნიშვნელობა; ნომერი <მნიშვნელობა+4; ნომერი ++) {for (ხელმოუწერელი სიმბოლო ვერტიკალური = 0; ვერტიკალური <8; ვერტიკალური ++) {ჩვენების ქულა [y] [ვერტიკალური] = სიმბოლო [ნომერი] [ვერტიკალური]; } y ++; } for (ხელმოუწერელი char ჰორიზონტალური = 0; ჰორიზონტალური <8; ჰორიზონტალური ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {if (displayscore [horizontal] [vertical] == 1) // განსაჯეთ შუქი ჩართულია {strip.setPixelColor (მსუბუქი [ჰორიზონტალური] [ვერტიკალური], გ); } else strip.setPixelColor (მსუბუქი [ჰორიზონტალური] [ვერტიკალური], 0); }} strip.show (); // მონაცემთა გადადების გაგზავნა (5000); K = 0; // ჯოისტიკის მიმართულების გადატვირთვა sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // გველის საკოორდინატო ქულის გადაყენება = 0; // თამაშის ქულის სიჩქარის გადატვირთვა S = 400; // გველის საწყისი სიჩქარე} void setup () {Serial.begin (9600); // ბიბლიოთეკის ინიციალიზაცია strip.begin (); // მონაცემების გაგზავნა. ნაგულისხმევი თითოეული წერტილის ფერი 0. ასე რომ ყოველი წერტილი არ არის განათებული დასაწყისში. ზოლები. ჩვენება (); K = 0; // Joystick sx [0] = 2 მიმართულების გადაყენება; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // გველის საკოორდინატო ქულის გადაყენება = 0; // თამაშის ანგარიშის გადატვირთვა ფერი [0] = შემთხვევითი (3, 18); // ფერის დაყენება. პარამეტრი არის R G B, დიაპაზონი 0-255. ფერი [1] = შემთხვევითი (3, 18); ფერი [2] = შემთხვევითი (3, 18); c = ზოლები. ფერი (ფერი [1], ფერი [0], ფერი [2]); // მწვანე წითელი ლურჯი // ფერის დაყენება (რიცხვი = 0; ნომერი <24; ნომერი ++) {strip.setPixelColor (გადადით [რიცხვი], გ); } strip.show (); // მონაცემთა გადადების გაგზავნა (2000); შემთხვევითი (); // პროდუქციის წარმოება} void mobile () {KEY = K; // გველის ყოველი მოძრაობა ერთხელ ცვლის მიმართულებას. თუ (KEY == 8) // გველის აღმავალი მოძრაობა {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; თუ (sy [0] <0) // გასცდით საზღვარს და განაგრძეთ მეორე მხარეს sy [0] = 7; } else if (KEY == 5) // გველის ქვევით მოძრაობა {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] + 1; თუ (sy [0]> 7) // გასცდით საზღვარს და განაგრძეთ მეორე მხარეს sy [0] = 0; } else if (KEY == 4) // გველის მარცხენა მოძრაობა {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] - 1; თუ (sx [0] <0) // გასცდით საზღვარს და განაგრძეთ მეორე მხარეს sx [0] = 7; } else if (KEY == 6) // გველის მარჯვენა მოძრაობა {for (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sx [0] = sx [0] + 1; თუ (sx [0]> 7) // გასცდით საზღვარს და განაგრძეთ მეორე მხარეს sx [0] = 0; } // გველის სხეულის გადატანა ღილაკით} ბათილი ჩვენებები () {for (number = 0; number <64; number ++) // ეკრანის გასუფთავება {strip.setPixelColor (ნომერი, 0); } strip.show (); ფერი [0] = 40; // ფერის დაყენება. პარამეტრი არის R G B, დიაპაზონი 0-255. ფერი [1] = 0; ფერი [2] = 0; c = ზოლები. ფერი (ფერი [1], ფერი [0], ფერი [2]); // მწვანე წითელი ლურჯი // დააყენეთ ფერი x = ღია [FX] [FY]; // კვების ზოლის ჩვენება. SetPixelColor (x, c); ფერი [0] = შემთხვევითი (3, 18); // ფერის დაყენება. პარამეტრი არის R G B, დიაპაზონი 0-255. ფერი [1] = შემთხვევითი (3, 18); ფერი [2] = შემთხვევითი (3, 18); c = ზოლები. ფერი (ფერი [1], ფერი [0], ფერი [2]); // მწვანე წითელი ლურჯი // ფერის დაყენება (int i = 2 + ქულა; i> 0; i--) // გველის სხეულის ჩვენება {x = მსუბუქი [sx [sy ; strip.setPixelColor (x, c); } ფერი [0] = 0; // ფერის დაყენება. პარამეტრი არის R G B, დიაპაზონი 0-255. ფერი [1] = 40; ფერი [2] = 0; c = ზოლები. ფერი (ფერი [1], ფერი [0], ფერი [2]); // მწვანე წითელი ლურჯი // დააყენეთ ფერი x = ღია [sx [0] [sy [0]; // გველის თავის ზოლის ჩვენება. SetPixelColor (x, c); strip.show (); // მონაცემების გაგზავნა} void loop () {mobile (); myDelay (speedS); // ფარგლებში () არის დაგვიანების დრო. მონიტორები (); SX = sx [0]; SY = sy [0]; // მიიღეთ გველის თავის კოორდინატი (int i = 1; i <= 2+ქულა; i ++) {if (SX == sx && SY == sy ) თამაში (); } // განსაჯეთ შეეხო თუ არა გველის თავი მის სხეულს. თუ შეეხო, მაშინ გადადი GameOver– ზე. თუ (SY == FY && SX == FX) {RANDOM (); ანგარიში ++; ფერი [0] = 40; // ფერის დაყენება. პარამეტრი არის R G B, დიაპაზონი 0-255. ფერი [1] = 0; ფერი [2] = 0; c = ზოლები. ფერი (ფერი [1], ფერი [0], ფერი [2]); // მწვანე წითელი ლურჯი // დააყენეთ ფერი x = ღია [FX] [FY]; // კვების ზოლის ჩვენება. SetPixelColor (x, c); strip.show (); // მონაცემების გაგზავნა, თუ (! (ქულა % 5)) {// გველის სიჩქარის დადგენა ქულის მიხედვით. შეჭამეს ყოველი 5 საკვები, შეაგროვეთ 100 მლ. speedS = სიჩქარეS - 50; თუ (სიჩქარე <150) // ქვედა ზღვარია 200ms. თუ სიჩქარე 200 მმ -ზე ნაკლებია, სიჩქარე რჩება 200 მმ. სიჩქარე S = 150; }} // განსაჯეთ მიირთმევენ თუ არა საჭმელს. თუ გველმა შეჭამა საკვები, მაშინ პლუს შეაფასა და შემთხვევით აღადგინა საკვები. }

ექსპერიმენტის შედეგი

ნაბიჯი 4: ექსპერიმენტის შედეგი

შედარებითი კითხვები:

FreaksBot Bluetooth მანქანა

აანთეთ პირველი მძივი 8*8 NeoPixels მატრიცაზე არდუინოსთან ერთად

მიკრო: ბიტი ექსპერიმენტი 05: RGB LED - Elecfreaks Mirco: bit Starter Kit კურსი

პარასკევს პროდუქტის პოსტი: LED მუსიკის სიხშირის სპექტრის ჩვენების შედუღების ნაკრები

გამოიყენეთ ElecFreaks Micro: bit Tinker Kit ჭკვიანი შუქის შესაქმნელად

გირჩევთ: