Матричная игра Snake LED 16x16
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Об этом проекте
Всем привет! Я изучаю возможности Arduino. И я решил скопировать классическую аркадную змейку со своей старой нокиа. Итак, вот оно.
Я использовал светодиодную матрицу 16x16, джойстик и Arduino UNO. Это было непросто, каждый светодиод подключен последовательно. Итак, логика перемещения немного сложна.
Здесь вы можете управлять персонажем-змеей. Съешьте что-нибудь вкусненькое, вырасти и умри. Программный код готов к обновлению.
Получайте удовольствие и наслаждайтесь. Если вам это нравится, не думайте дважды, чтобы подписаться на мой youtube и instagram :) Они на русском, но я скоро сделаю субтитры.
Код
- Код
Код C / C ++
#include// настройки матрицы # определить NUM_LEDS 256 # определить DATA_PIN 3 # определить ЯРКОСТЬ 8 // настройки джойстика # определить pinX A2 // ось X джойстика # определить pinY A1 // ось Y джойстика # определить swPin 2 // кнопка джойстикаint snake [256]; // массив элементов змеи int snakeSize =2; // реальный размер змейки int snakeSpeed =500; int row; // номер строки int col; // номер столбца int lastDirection =135; // направление начала int i, newDirection, OlddX =1, OlddY, f; int красный, зеленый, синий, fred, fgreen, fblue; // светодиоды colorsCRGB [NUM_LEDS]; void setup () {red =random (0, 255); зеленый =случайный (0, 255); синий =случайный (0, 255); fred =random (127, 255); fgreen =random (127, 255); fblue =random (127, 255); Serial.begin (9600); pinMode (pinX, ВХОД); pinMode (pinY, INPUT); pinMode (swPin, ВВОД); digitalWrite (swPin, HIGH); FastLED.addLeds (светодиоды, NUM_LEDS); FastLED.setBrightness (ЯРКОСТЬ); для (я =0; я <=255; я ++) {змея [я] =0; } для (i =0; i <=snakeSize; i ++) {snake [i] =lastDirection + i; } f =случайный (0, 255); FastLED.show ();} int Snakedirection (int last, int dX, int dY) {dX =map (dX, 0, 1000, -1, 1); dY =map (dY, 0, 1000, -1, 1); если (dX ==0 &&dY ==0 &&OlddX! =dX) {dX =OlddX; } if (dY ==0 &&dX ==0 &&OlddY! =dY) {dY =OlddY; } int newDirection =last; if (dX! =0) {// движение в направлении X if (row &1) {if (col ==0 &&dX ==1) {newDirection =last -15; } иначе, если (col ==15 &&dX ==-1) {newDirection =last +15; } иначе newDirection =last + dX; // четная} else {if (col ==0 &&dX ==1) {newDirection =last +15; } иначе, если (col ==15 &&dX ==-1) {newDirection =last -15; } иначе newDirection =last - dX; // не четная}} if (dY <0) {// движение в направлении Y ВНИЗ if (row ==15 &&dY ==-1) {newDirection =col;} else if (row &1) {newDirection =last + ( столбец * 2) +1; // четная} else {newDirection =last + (16-col-1) + (16-col); // не четная}} if (dY> 0) {// движение в направлении Y ВВЕРХ if (row ==0 &&dY ==1) {newDirection =255 - col;} else if (row &1) {newDirection =last - (последний - 16 * ряд) - (16 - столбик); // четная} else {newDirection =last - (col * 2) -1; // не четная}} OlddX =dX; OlddY =dY; return newDirection;} int snakeMove (int snakeDirection) {для (я =0; я <=255; я ++) {если (змея [я] ==snakeDirection) {смерть (); }} FastLED.clear (); для (я =размер змеи; я> =1; я -) {змея [я] =змея [я-1]; } змея [0] =snakeDirection; for (i =0; i <=255; i ++) {if (snake [i]) {светодиоды [snake [i]]. setRGB (красный, зеленый, синий); }} FastLED.show (); строка =(число) (snakeDirection / 16); // номер строки if (row &1) {col =(row + 1) * 16 - snakeDirection - 1; } else {col =snakeDirection - строка * 16; } return snakeDirection;} недействительная еда (int eaten) {if (eaten ==f) {snakeSize ++; f =случайный (0, 255); красный =Фред; зеленый =зеленый; синий =голубой; fred =random (0, 255); fgreen =random (0, 255); fblue =random (0, 255); snakeSpeed =snakeSpeed / 1.1; } else {светодиоды [f] .setRGB (fred, fgreen, fblue); FastLED.show (); }} void death () {snakeSize =2; snakeSpeed =500; красный =255; зеленый =0; синий =0; } цвет пустоты (логический sw) {если (! sw) {красный =случайный (0,255); зеленый =случайный (0,255); синий =случайный (0,255); }} void loop () {цвет (digitalRead (swPin)); newDirection =Snakedirection (lastDirection, analogRead (pinX), analogRead (pinY)); lastDirection =snakeMove (newDirection); еда (newDirection); задержка (snakeSpeed);}
Схема
Производственный процесс
- Игровой контроллер Arduino
- Игра Arduino Pong на матрице 24x16 с MAX7219
- Игра Arduino Nano Tetris на самодельной матрице 16x8
- Arduino с Bluetooth для управления светодиодом!
- Светодиодная матрица + датчик движения дверной дисплей [Arduino Holiday]
- Четвероногий Arduino
- Игра Pixel Chaser
- Перекидные часы Arduino с одной светодиодной матрицей
- Цветовой микшер Arduino RGB
- Управление светодиодной матрицей с помощью Arduino Uno