Мазмуну:

NeoPixels Matrix: Жылан оюну: 4 кадам
NeoPixels Matrix: Жылан оюну: 4 кадам

Video: NeoPixels Matrix: Жылан оюну: 4 кадам

Video: NeoPixels Matrix: Жылан оюну: 4 кадам
Video: LED Snake using NeoPixel 2024, Июль
Anonim
NeoPixels Matrix: Жылан оюну
NeoPixels Matrix: Жылан оюну

Бала кезибизде оюн кутучабызда же мобилдик телефондо ойногон жылан оюну дагы эле эсиңиздеби? Бүгүн биз 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 колдонуңуз

Сунушталууда: