Мазмуну:
- 1 -кадам: Компоненттердин тизмеси:
- 2 -кадам: Аппараттык туташуу
- 3 -кадам: Программалоо
- 4 -кадам: Эксперименттин жыйынтыгы
Video: NeoPixels Matrix: Жылан оюну: 4 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:38
Бала кезибизде оюн кутучабызда же мобилдик телефондо ойногон жылан оюну дагы эле эсиңиздеби? Бүгүн биз 8*8 NeoPixels Matrix менен жылан оюнун жасоону үйрөнөбүз. Биз жыланды башкаруу үчүн башкаруу борбору жана Joystick breakout модулу катары Arduino uno тандайбыз.
1 -кадам: Компоненттердин тизмеси:
Аппараттык:
1 X Freaduino UNO Rev2.2 MB_EFUNO
1 X ийкемдүү 64 RGB LED 8*8 NeoPixels Matrix
1 X джойстиктин үзүлүү модулу BKOUT_MD01
3 X Guide Line
Программалык камсыздоо:
Arduino IDE
2 -кадам: Аппараттык туташуу
NeoPixelsти D2 пинге туташтырыңыз.
Джойстиктин үзүлүү модулундагы "X" Arduino UNO тактасындагы A0 туташтыруу пини, "Y" туташтыруу пини A1, "K" туташтыруу пини A2.
3 -кадам: Программалоо
P#кирет
#аныктоо PIN 2 // Чыкуучу пин #dexine MAX_LED 64 // Шариктин саны uint32_t c; int a = 0, сан; белгисиз char huan = 0, ci = 0; белгисиз char u = 40; // Белгисиз сөздөр тобунун шрифтинин өлчөмү char x = 0; кол тамгасы жок Түс [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},}; кол тамгасы жок [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 },}; белгисиз char displayscore [8] [8]; int speedS = 400; // Жыландын инт баллынын баштапкы ылдамдыгы; // Оюндун упайы 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]; // Жыландын тулку чар сы координаты [64]; Adafruit_NeoPixel тилкеси = Adafruit_NeoPixel (MAX_LED, PIN, NEO_RGB + NEO_KHZ800); жараксыз RANDOM () {A: FX = random (0, 7); FY = туш келди (0, 7); for (int i = 0; i <3+score; i ++) // Жыландын денесинде тамактын көрсөтүлүшүн алдын алуу {if (FX == sx && FY == sy ) goto A; }} void myDelay (unsigned int Time) {// Жылан кыймылынын кечигүү мезгилинде, биз тамактын жаркырашы сыяктуу бир нерсе кылышыбыз керек жана Joystickтин багытын окуубуз керек (int t = 1; t 950 && KEY! = 5) { K = 8; } else if (yValue <50 && KEY! = 8) {K = 5; } if if (xValue 950 && KEY! = 4) {K = 6; }} // Бул жерден клавиатуранын багыты жыландын жылуу багытына карама -каршы экенин салыштырууга болот. Эгерде ал карама -каршы болсо, анда баскычтопту бериңиз. /*********************************************** ************************************************** ************************************************ ************************************************ ********/ void gameover () {// Gameover программасы токтогондон кийин оюнду кайра баштоо үчүн борбордук баскычты басыңыз. кол коюлбаган баанын мааниси, y; Түс [0] = туш келди (3, 18); // Түс коюу. Параметр RG B, диапазону 0-255. Түс [1] = туш келди (3, 18); Түс [2] = туш келди (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); балл = балл / 10; маани = маани * 4; y = 0; for (number = value; number <value+4; number ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displayscore [y] [vertical] = character [number] [vertical]; } y ++; } мааниси = балл % 10; маани = маани * 4; for (number = value; number <value+4; number ++) {for (unsigned char vertical = 0; vertical <8; vertical ++) {displayscore [y] [vertical] = character [number] [vertical]; } y ++; } үчүн (unsigned char horizontal = 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); // Initialize library strip.begin (); // Маалымат жөнөтүү. Ар бир чекиттин түсүн демейки катары 0. Ошентип, ар бир чекит башында жарыкталбайт. strip.show (); K = 0; // Джойстиктин багытын баштапкы абалга келтирүү sx [0] = 2; sx [1] = 1; sx [2] = 0; sy [0] = 1; sy [1] = 1; sy [2] = 1; // Жыландын координаттарынын эсебин кайра коюу = 0; // Оюндун эсебин кайра коюу Түс [0] = туш келди (3, 18); // Түс коюу. Параметр RG B, диапазону 0-255. Түс [1] = туш келди (3, 18); Түс [2] = туш келди (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); // Жашыл Кызыл Көк // Түстү коюу (саны = 0; сан <24; сан ++) {strip.setPixelColor (go [сан], с); } strip.show (); // Маалыматты кечиктирүү (2000); RANDOM (); // Тамак -аш өндүрүү} void mobile () {KEY = K; // Жыландын ар бир кыймылы бир жолу багытын өзгөртөт. if (KEY == 8) // Жыландын өйдө карай кыймылы {үчүн (int i = 2 + score; i> 0; i--) {sx = sx [i-1]; sy = sy [i - 1]; } sy [0] = sy [0] - 1; if (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; if (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; if (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; if (sx [0]> 7) // Чек арадан өтүп, башка тарапта улантыңыз sx [0] = 0; } // Жыландын денесин баскычы менен жылдыруу} void display () {for (number = 0; number <64; number ++) // Экранды тазалоо {strip.setPixelColor (сан, 0); } strip.show (); Түс [0] = 40; // Түстү коюу. Параметр R G B, диапазону 0-255. Түс [1] = 0; Түс [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Green Red Blue // Set color x = light [FX] [FY]; // Тамак ашты көрсөтүңүз.setPixelColor (x, c); Түс [0] = туш келди (3, 18); // Түстү коюу. Параметр R G B, диапазону 0-255. Түс [1] = туш келди (3, 18); Түс [2] = туш келди (3, 18); c = strip. Color (Color [1], Color [0], Color [2]); // Жашыл Кызыл Көк // Түстү коюу (int i = 2 + score; i> 0; i--) // Жыландын денесин көрсөтүү {x = light [sx [sy ; strip.setPixelColor (x, c); } Түс [0] = 0; // Түстү коюу. Параметр R G B, диапазону 0-255. Түс [1] = 40; Түс [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Жашыл Кызыл Көк // Түс коюу x = жарык [sx [0] [sy [0]; // Жыландын башын чагылдыруу.setPixelColor (x, c); strip.show (); // Маалыматтарды жөнөтүү} void loop () {mobile (); myDelay (speedS); // Within ичинде) - кечигүү убактысы. көрсөтөт (); SX = sx [0]; SY = sy [0]; // Жылан башынын координатын алыңыз (int i = 1; i <= 2+score; i ++) {if (SX == sx && SY == sy ) gameover (); } // Жыландын башы анын денесине тийгенби же жокпу соттойлу. Эгер тийсе, анда GameOverге өтүңүз. if (SY == FY && SX == FX) {RANDOM (); балл ++; Түс [0] = 40; // Түстү коюу. Параметр R G B, диапазону 0-255. Түс [1] = 0; Түс [2] = 0; c = strip. Color (Color [1], Color [0], Color [2]); // Green Red Blue // Set color x = light [FX] [FY]; // Тамак ашты көрсөтүңүз.setPixelColor (x, c); strip.show (); // Маалыматтарды жөнөтүү if (! (% 5 упай)) {// Упайга жараша жыландын ылдамдыгын тездетүү. Ар бир жеген 5 тамак, 100мм ылдамдыкта. ылдамдыкS = ылдамдыкS - 50; if (speedS <150) // Төмөнкү чек 200ms. Эгерде ылдамдык 200 мсден төмөн болсо, ылдамдык 200 мс бойдон калат. speedS = 150; }} // Тамак жеген -жебегенин соттогула. Эгерде жылан тамак жесе, анда плюс упай алат жана тамакты туш келди калыбына келтирет. }
Эксперименттин Жыйынтыгы
4 -кадам: Эксперименттин жыйынтыгы
Салыштырмалуу окуулар:
Bluetooth машинасы FreaksBot
Биринчи мончокту Arduino менен 8*8 NeoPixels матрицасына күйгүзүңүз
Микро: бит эксперименти 05: RGB LED - Elecfreaks Mirco: bit Starter Kit Course
Жума Продукт Post: LED Music Frequency Spectrum Display Soldering Kit
Smart Light кылуу үчүн ElecFreaks Micro: bit Tinker Kit колдонуңуз
Сунушталууда:
3D басылган жылан робот: 7 кадам (сүрөттөр менен)
3D басылган жылан роботу: 3D принтеримди алгандан кийин аны менен эмне кылсам болот деп ойлоно баштадым. Мен көп нерсени басып чыгардым, бирок 3D басып чыгаруунун жардамы менен бүтүндөй конструкция жасагым келди. Анан робот жаныбар жасоону ойлодум. Менин биринчи идеям ит же жөргөмүш жасоо болчу, бирок
Жылан: пайдасыз машина: 5 кадам
Жылан: Пайдасыз машина: Билесизби, сиз бала кезиңизде Nokia телефонуңузда жылан ойногонсуз? Белгилүү бир убакта жылан өзүнүн куйругун кууп баштайт, ошондо сен оюн бүтөөрүн билгенсиң. Биз муну роботко айлантууну чечтик, бирок оюн эч качан
Жылан оюну: 4 кадам
Жылан оюну: Саламатсыздарбы балдар, бүгүн мен сизге Pythonдо негизги жылан оюнун кантип жасоону көрсөтөм жана бул эс алууда досторду таң калтырам. Бул абдан жөнөкөй, сизге python 3 жана pygame орнотуу керек. Бул көрсөтмөдө мен pygame орнотуу боюнча видеону коштум. Кийин
Arduino OLED жылан оюну: 3 кадам
Arduino OLED Snake Game: Салам, кош келиңиз, биздин OLED Оюнду кантип жасоо боюнча көрсөтмөлөрүбүзгө, бул долбоор биз биринчи оюнубузду arduino, soooo менен жасоого аракет кылып жатканда пайда болду, биз nokiaга караганда кайдан баштоо керек деп ойлодук. классикалык жылан (жок дегенде
C: 8 кадамдарында Жылан оюну
Game in Snake in C: Snake оюну c программасын колдонуп оңой эле алмаштырыла турган эски мобилдик телефондордо популярдуу болгон. Бул долбоорду куруу үчүн сизге с синтаксисинин негизги түшүнүгү керек. Мисал: цикл үчүн, цикл ж. Б. Мындай оюн долбоорун куруу менен программистиңиз