Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

MAX72XX LED matrix display game asteroid

Komponen dan persediaan

Arduino Mega 2560
× 1
Maxim Integrated MAXREFDES99# MAX7219 Display Driver Shield
× 1
Sakelar Tombol Tekan SparkFun 12mm
× 2
Buzzer
× 1
Breadboard (generik)
× 1

Tentang proyek ini

Ini adalah permainan sederhana yang menggunakan MAX72XX LED-Matrix sebagai tampilan, dua sakelar mikro sebagai tombol dan bel aktif untuk efek suara.

Anda adalah kapal bintang dan Anda harus menghindari kontak dengan asteroid yang jatuh. Permainan menjadi lebih cepat dari waktu ke waktu. Pada akhirnya, skor ditampilkan yang menunjukkan berapa lama Anda bertahan.

Kode

  • kode permainan asteroid
kode permainan asteroidArduino
/********************************************* ********** * Ini adalah permainan sederhana menggunakan MAX72XX LED-Matrix. * Anda adalah kapal bintang dan Anda harus menghindari kontak dengan * asteroid yang jatuh. * * (c) 2018 oleh Joshua Weßner * * * ************************************** *****************///LedControl oleh Eberhard Fahle// lihat:http://wayoda.github.io/LedControl/#include "LedControl.h"/* Sekarang kita membutuhkan LedControl untuk digunakan. ***** Nomor pin ini mungkin tidak akan berfungsi dengan perangkat keras Anda ***** pin 12 terhubung ke DataIn pin 11 terhubung ke CLK pin 10 terhubung ke LOAD Kami hanya memiliki satu MAX72XX. */LedControl lc=LedControl(12,11,10,1);/********************************* ***************************** * Variabel Global */ /* penundaan antara pembaruan tampilan */unsigned long delaytime=1000; /* untuk Menampilkan skor */String scoreString;int score;int ratusan;String scoreStr;String scoreArr[] ={"" ,"" ,"" };/* sakelar mikro untuk kontrol */int pinLeft =2;int pinRight =3;volatil unsigned long buttonPressed;int buttonDelay =150; //menangani kontak bouncevolatile bool gameOver =false;/* "rythm" dari game, im milidetik */int tick;int tickCounter =1;/* timestamp */unsigned long now;/* display */int ship; /* Posisi awal kapal */int kolom[] ={0,0,0,0,0,0,0,0}; // 8 kolom, setiap int adalah baris 1-8.int randomInt;/********************************* ***************************** * setup */void setup() { /* Inisialisasi */ gameOver =false; ratusan =0; scoreArr[0] =""; scoreArr[1] =""; scoreArr[2] =""; skor =0; centang =300; tickCounter =1; kapal =3; sekarang =mili(); tombolDitekan =milis(); randomSeed(analogRead(15)); // bilangan acak yang lebih baik untuk(int i =0; i<8; i++) kolom[i] =0; // Debugging // Serial.begin(9600); // Serial.print(kolom[0]); /* MAX72XX dalam mode hemat daya saat startup, kita harus melakukan panggilan bangun */ lc.shutdown(0,false); /* Atur kecerahan ke nilai sedang */ lc.setIntensity(0,1); /* dan hapus tampilan */ lc.clearDisplay(0); pinMode(pinLeft, INPUT_PULLUP); pinMode(pinKanan, INPUT_PULLUP); /* tekan tombol lampirkan untuk menyela */ attachInterrupt(digitalPinToInterrupt(pinLeft), kiri, FALLING); attachInterrupt(digitalPinToInterrupt(pinRight), kanan, JATUH); }/************************************************ ************** * handle tombol kiri tekan */void left(){ if(millis() - buttonPressed> buttonDelay) // handle switch contact bounce { if(ship !=0) mengirimkan--; kapal lain =7; lc.clearDisplay(0); tombolDitekan =milis(); } // setelah game over, tekan tombol akan restart game if(gameOver ==true){ gameOver =false; mempersiapkan(); }}/************************************************ *************** * handle tombol kanan tekan */void right(){ if(millis() - buttonPressed> buttonDelay) // handle switch contact bounce { if(ship !=7 ) kapal++; kapal lain =0; lc.clearDisplay(0); tombolDitekan =milis(); } // setelah game over, tekan tombol akan restart game if(gameOver ==true){ gameOver =false; mempersiapkan(); } }/************************************************ *************** * loop */void loop() { if(millis() - now> tick){ //lakukan setiap tick // skor adalah:berapa banyak tick yang Anda selamatkan skor++; sekarang =mili(); if(tickCounter ==1){ //setiap 4th tick // membuat game lebih cepat dari waktu ke waktu tick =tick/1,02; // pilih secara acak kolom randomInt =random(0, 8); // jika tidak ada asteroid di kolom, buat satu di baris 1. if(columns[randomInt] ==​​0){ kolom[randomInt] =1; } } if(tickCounter !=4) tickCounter++; lain tickCounter =1; // lakukan untuk setiap kolom for(int i =0; i<8; i++){ if(columns[i] ==10) // hapus asteroid saat keluar dari tampilan kolom[i] =0; if(columns[i] !=0) // membuat asteroid jatuh kolom[i]++; } lc.clearDisplay(0); } /* write to display */ // ship lc.setLed(0, 7, ship, true); // asteroid untuk(int i =0; i<8; i++){ if(columns[i]> 0) lc.setLed(0, kolom[i]-2, i, true); lc.setLed(0, kolom[i]-3, i, benar); } // mendeteksi tabrakan kapal dengan asteroid jika(kolom[kapal] ==10 atau kolom[kapal] ==9){ lc.clearDisplay(0); // menganimasikan ledakan untuk(int i =0; i<4; i++){ lc.setLed(0,7,kapal+i,true); lc.setLed(0,7,ship-i,true); lc.setLed(0,7-i,ship+i,true); lc.setLed(0,7-i,ship-i,true); lc.setLed(0,7-1.5*i,ship,true); // suara ledakan unsigned lama =milis(); int suara acak=1000; while(milis() - waktu <=250) { randomSound--; nada(9, acak(Suara acak, 1000)); // mengubah parameter random() untuk suara yang berbeda } lc.clearDisplay(0); tidakNada(9); } penundaan (500); /* menampilkan skor */ scoreStr =String(skor); // dapatkan satu digit dari skor int scoreArr[0] =scoreStr.charAt(0); scoreArr[1] =scoreStr.charAt(1); scoreArr[2] =scoreStr.charAt(2); // matriks hanya dapat menampilkan hingga 2 digit (hingga 99) if(score <100){ for(int i =0; i<2; i++){ if(scoreArr[i] =="0") draw0( 1+i*4); if(scoreArr[i] =="1") draw1(1+i*4); if(scoreArr[i] =="2") draw2(1+i*4); if(scoreArr[i] =="3") draw3(1+i*4); if(scoreArr[i] =="4") draw4(1+i*4); if(scoreArr[i] =="5") draw5(1+i*4); if(scoreArr[i] =="6") draw6(1+i*4); if(scoreArr[i] =="7") draw7(1+i*4); if(scoreArr[i] =="8") draw8(1+i*4); if(scoreArr[i] =="9") draw9(1+i*4); } } // jika skor> 100, tampilkan hanya dua digit terakhir dari skor else{ for(int i =1; i<3; i++){ if(scoreArr[i] =="0") draw0(1+( i-1)*4); if(scoreArr[i] =="1") draw1(1+(i-1)*4); if(scoreArr[i] =="2") draw2(1+(i-1)*4); if(scoreArr[i] =="3") draw3(1+(i-1)*4); if(scoreArr[i] =="4") draw4(1+(i-1)*4); if(scoreArr[i] =="5") draw5(1+(i-1)*4); if(scoreArr[i] =="6") draw6(1+(i-1)*4); if(scoreArr[i] =="7") draw7(1+(i-1)*4); if(scoreArr[i] =="8") draw8(1+(i-1)*4); if(scoreArr[i] =="9") draw9(1+(i-1)*4); } // digit pertama skor ("ratusan") ditampilkan sebagai titik:Satu titik untuk setiap seratus. for(int i =1; i<10; i++){ if(scoreArr[0] ==String(i)) ratusan =i; } for(int i =1; i <=ratusan; i++){ lc.setLed(0,0,i-1,true); lc.setLed(0,1,i-1,true); penundaan (200); } } gameOver =benar; while(gameOver ==true){ // tidak melakukan apa-apa selain menunggu tombol tekan } } }/////////////////////////// Draw angka skor ///////////////////////////////////////void draw1(posisi int){ lc.setColumn(0,0+posisi,B00001000); lc.setColumn(0,1+posisi,B00011111); }void draw2(int posisi){ lc.setColumn(0,0+posisi,B00010111); lc.setColumn(0,1+posisi,B00010101); lc.setColumn(0,2+posisi,B00011101); }void draw3(posisi int){ lc.setColumn(0,0+posisi,B00010001); lc.setColumn(0,1+posisi,B00010101); lc.setColumn(0,2+posisi,B00011111); }void draw4(int posisi){ lc.setColumn(0,0+posisi,B00011100); lc.setColumn(0,1+posisi,B000000100); lc.setColumn(0,2+posisi,B00011111); }void draw5(int position){ lc.setColumn(0,0+posisi,B00011101); lc.setColumn(0,1+posisi,B00010101); lc.setColumn(0,2+posisi,B00010111); }void draw6(int position){ lc.setColumn(0,0+posisi,B00011111); lc.setColumn(0,1+posisi,B00010101); lc.setColumn(0,2+posisi,B00010111); }void draw7(posisi int){ lc.setColumn(0,0+posisi,B00010000); lc.setColumn(0,1+posisi,B00010011); lc.setColumn(0,2+posisi,B00011100); }void draw8(int posisi){ lc.setColumn(0,0+posisi,B00011111); lc.setColumn(0,1+posisi,B00010101); lc.setColumn(0,2+posisi,B00011111); }void draw9(int position){ lc.setColumn(0,0+posisi,B00011101); lc.setColumn(0,1+posisi,B00010101); lc.setColumn(0,2+posisi,B00011111); }void draw0(int posisi){ lc.setColumn(0,0+posisi,B00011111); lc.setColumn(0,1+posisi,B00010001); lc.setColumn(0,2+posisi,B00011111); }

Skema


Proses manufaktur

  1. Catur
  2. Pinball
  3. Sepakbola
  4. Game Arduino Pong - Tampilan OLED
  5. Game Roulette LED 37 DIY
  6. Game Arduino Pong pada Matrix 24x16 dengan MAX7219
  7. Game Arduino Nano Tetris di Matriks 16x8 Buatan Sendiri
  8. Game Joystick
  9. Matriks LED + Tampilan Pintu Sensor Gerak [Arduino Holiday]
  10. 8x Pencahayaan LED dengan Suara