Სარჩევი:
- ნაბიჯი 1: კომპონენტების სია:
- ნაბიჯი 2: აპარატურის კავშირი
- ნაბიჯი 3: პროგრამირება
- ნაბიჯი 4: ექსპერიმენტის შედეგი
ვიდეო: NeoPixels Matrix : გველი თამაში: 4 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:16
კიდევ გახსოვთ გველის თამაში, რომელსაც ბავშვობაში ვთამაშობდით ჩვენს სათამაშო ყუთზე ან მობილურზე? დღეს ჩვენ ვისწავლით თუ როგორ უნდა გავაკეთოთ გველის თამაში 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 ჭკვიანი შუქის შესაქმნელად
გირჩევთ:
გველი: უსარგებლო მანქანა: 5 ნაბიჯი
გველი: უსარგებლო მანქანა: იცით, როდესაც ბავშვობაში იყავით და გველის თამაშობდით თქვენს ნოკიაზე? რაღაც მომენტში გველი დაიწყებდა საკუთარი კუდის დევნას და ეს მაშინ, როცა იცოდი, რომ თამაში დასრულდებოდა. ჩვენ გადავწყვიტეთ რობოტი გაგვეკეთებინა, მხოლოდ თამაში არასოდეს
სიმონ თამაში - სახალისო თამაში!: 5 ნაბიჯი
სიმონ თამაში - სახალისო თამაში!: ცნობა: აქ გრძელი შაბათ -კვირის შემდეგ, თქვენ ნამდვილად უნდა შეეცადოთ დაასრულოთ ყველა ის ამოცანა და სამუშაო, რომელზედაც თქვენ ხართ პასუხისმგებელი. დროა ჩვენც მოვამზადოთ ტვინი, არა? გარდა იმ მოსაწყენი და უაზრო თამაშებისა, არის თამაში სახელწოდებით Simon Game
Aruduino LED თამაში სწრაფი დაწკაპუნებით ორი მოთამაშის თამაში: 8 ნაბიჯი
Aruduino LED თამაში სწრაფი დაწკაპუნებით ორი მოთამაშის თამაში: ეს პროექტი შთაგონებულია @HasonAlkeim– ით. თუ თქვენ მზად ხართ ღრმად შეხედოთ აქ არის ბმული, რომლის ნახვა შეგიძლიათ https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/. ეს თამაში არის Alkeim's– ის გაუმჯობესებული ვერსია. Ეს არის
Arduino OLED გველი თამაში: 3 ნაბიჯი
Arduino OLED გველის თამაში: გამარჯობა და მოგესალმებით, ჩვენს ინსტრუქციებში, თუ როგორ უნდა გავაკეთოთ და არდუინო OLED თამაში, ეს პროექტი მოხდა მაშინ, როდესაც ჩვენ ვცდილობდით ჩვენი პირველი თამაში არდუინოთი, ასე რომ, ჩვენ ვიფიქრეთ, სად უნდა დავიწყოთ უკეთესი ვიდრე ნოკია კლასიკური გველი (კარგად მაინც
სამეურვეო თამაში სეგა სატურნის თამაში კომპიუტერზე: 6 ნაბიჯი
სამეურვეო თამაში Sega Saturn თამაში კომპიუტერზე: მე ვარ Sega Saturn კონსოლის დიდი ფანი და ბევრი თამაშის სათაურების კოლექცია. მე ფლობდი იაპონიის შავ და თეთრ მოდელს. და ორივე მწყობრიდან გამოდის. ასე რომ, მე მოუთმენლად ველოდები ინტერნეტში Sega Saturn- ის ემულატორს და შევხვდები GigiGigi Saturn- ს