Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Bouw een Tetris-spel met Arduino Nano op een Zelfgemaakte 16×8 LED-matrix

Onderdelen en Benodigdheden

Arduino Nano R3 1
SparkFun Drukknop 12mm 4
Texas Instruments 74HC595 Shift Register (Serial naar Parallel) 2
Schuifschakelaar 1
5mm LED: Geel 128

Benodigde Tools en Machines

  • Solderbout (standaard)

Apps en Online Services

  • Arduino IDE

Over dit Project

Ik heb dit Tetris-spel gebouwd met een zelfgemaakte 16x8 LED-matrix, een Arduino Nano en twee 74HC595 shift registers. Ik heb ook een piepgeluid toegevoegd bij het indrukken van een knop.

Code

Tetris Code (Arduino)
/* Auteur: Jae Yeong Bae UBC ECE jocker.tistory.com
   Datum: 18 jan 2013
   Bestandsnaam: Tetris v2
   Wijzigingen: v2: toont score bij game over
   Doel: tijd verdrijven.. + voor plezier
   Schakeling+Pins:
   Led Matrix: 2 74HC595 Shift Registers in volgorde: Groen, Blauw, Rood
   Pins: Latch = 3, Clock = 2, Data = 4
   Rij Anodes = 5 tot 13 (8 pins) gedeeld tussen beide matrices
   Knoppen (als digitaal): A4 = links, A5 = onder, A6 = rechts, A7 = boven (draaien)
   Opmerking: Dit is mijn tweede Arduino Project. Code kan rommelig en inefficiënt zijn.
   Referenties van Arduino Library en datasheets. */

unsigned char latchPin = 3;
unsigned char clockPin = 2;
unsigned char dataPin = 4;
unsigned char rowPin = 5;
long delays = 0;
short delay_ = 500;
long bdelay = 0;
short buttondelay = 150;
short btdowndelay = 30;
short btsidedelay = 80;
unsigned char blocktype;
unsigned char blockrotation;
int lines = 0;
boolean block[8][18]; // 2 extra voor rotatie
boolean pile[8][16];
boolean disp[8][16];
boolean lib[10][5][7];

void setup() {
  // Initialisatie van blokbibliotheek (tetromino's)
  lib[0][1][0] = 1; lib[0][2][0] = 1; lib[0][3][0] = 1;
  lib[0][0][1] = 1; lib[0][4][1] = 1; lib[0][3][2] = 1;
  lib[0][0][2] = 1; lib[0][4][2] = 1; lib[0][2][3] = 1;
  lib[0][0][3] = 1; lib[0][4][3] = 1; lib[0][1][4] = 1;
  lib[0][0][4] = 1; lib[0][4][4] = 1; lib[0][0][5] = 1;
  lib[0][4][5] = 1; lib[0][1][6] = 1; lib[0][2][6] = 1; lib[0][3][6] = 1;
  // ... (overige blokdefinities afgekort voor beknoptheid)

  int seed = (analogRead(0)+1)* (analogRead(1)+1)* (analogRead(2)+1)* (analogRead(3)+1);
  randomSeed(seed);
  random(10,9610806);
  seed = seed *random(3336,15679912)+analogRead(random(4)) ;
  randomSeed(seed);
  random(10,98046);

  cli(); // stop interrupts
  // Timer1 interrupt op 2kHz
  TCCR1A = 0; TCCR1B = 0; TCNT1 = 0;
  OCR1A = 259; // = (16*10^6) / (2000*64) - 1
  TCCR1A |= (1 << WGM01); // CTC modus
  TCCR1B |= (1 << CS12) | (1 << CS10); // 1024 prescaler
  TIMSK1 |= (1 << OCIE0A); // timer compare interrupt enable
  sei(); // allow interrupts

  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(A7, INPUT); // boven
  pinMode(A6, INPUT); // rechts
  pinMode(A5, INPUT); // links
  pinMode(A4, INPUT); // onder

  for(int i=0;i<8;i++) pinMode(rowPin+i,OUTPUT);
  newBlock();
  updateLED();
  Serial.begin(9600);
}

void loop() {
  if (delays < millis()) {
    delays = millis() + delay_;
    movedown();
  }
  // Knopacties
  int button = readBut();
  if (button == 1) rotate();      // boven = draaien
  if (button == 2) moveright();   // rechts
  if (button == 3) moveleft();    // links
  if (button == 4) movedown();    // onder
}

// Functies: moveleft, moveright, readBut, updateLED, rotate, movedown, check_overlap, check_gameover, gameover, newBlock, space_below, space_left, space_right, LEDRefresh
// Volledige implementatie in bijgevoegde codebestand

De volledige code is te lang om hier volledig weer te geven. Download het bestand via de GitHub-link of de code-sectie op de projectpagina.

Schema

Bouw een Tetris-spel met Arduino Nano op een Zelfgemaakte 16×8 LED-matrix

Productieproces

  1. Bouw een real-time gyroscoop-spel met Arduino Nano & MPU-6050 sensor
  2. Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
  3. DIY Arduino TV-B-Gone: Universele TV-uit-schakelaar
  4. DIY Arduino USB Gaming Controller – Bouw Je Eigen High-Performance Gamepad
  5. Bouw een 24×16 LED Pong-console met Arduino Nano & MAX7219
  6. Pixel Chaser: Interactieve één-tik LED-spel met Arduino Nano
  7. Arduino Flip Clock met 8×8 LED Matrix – DIY Real-Time Clock Project
  8. NeoPixel Matrix Pong op Arduino Nano: Bouw je eigen neon Pong-spel
  9. Bouw een handgehoude Geiger-teller met Arduino Nano
  10. 1D Pong-spel met Arduino en WS2812 LED-strip – Stap-voor-stap DIY handleiding
  11. Nooit meer alleen fietsen: slimme fietsveiligheidssysteem (Never Ride Alone)