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