Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Матричная игра Snake LED 16x16

Компоненты и расходные материалы

Arduino UNO
× 1
Пиксельная матрица светодиодов RGB, NeoPixel NeoMatrix
Я не уверен насчет этого. Свою светодиодную матрицу купил на алиэкспресс. Ссылка здесь http://ali.pub/4wxs2s
× 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);} 

Схема


Производственный процесс

  1. Игровой контроллер Arduino
  2. Игра Arduino Pong на матрице 24x16 с MAX7219
  3. Игра Arduino Nano Tetris на самодельной матрице 16x8
  4. Arduino с Bluetooth для управления светодиодом!
  5. Светодиодная матрица + датчик движения дверной дисплей [Arduino Holiday]
  6. Четвероногий Arduino
  7. Игра Pixel Chaser
  8. Перекидные часы Arduino с одной светодиодной матрицей
  9. Цветовой микшер Arduino RGB
  10. Управление светодиодной матрицей с помощью Arduino Uno