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

NeoMatrix Arduino Pong

Komponen dan persediaan

strip NeoPixel
× 1
Kabel jumper (generik)
× 1
Arduino Nano R3
× 1
Judul Wanita 8 Posisi 1 Baris (0,1")
× 1
Ukuran Setengah Papan Tempat Memotong Roti Perma-Proto
× 1
Joystick analog (Generik)
× 1
Potensiometer putar (generik)
× 1

Alat dan mesin yang diperlukan

Besi solder (generik)

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Matriks

Tidak, bukan filmnya, matriks NeoPixel! Untuk membuat matriks, cukup beli satu strip LED NeoPixel yang dapat dialamatkan satu per satu. Buka gulungan strip, dan perhatikan panah di atasnya. Anda hanya dapat memasangnya dalam SATU ARAH, Anda dapat merusaknya jika orientasinya salah.

Saya menggunakan strip 30 led/m 5m dan memotongnya menjadi strip masing-masing sepuluh LED. Saya kemudian mulai meletakkan strip di selembar kartu stok, dengan orientasi bergantian. Saya kemudian memotong kabel dengan panjang yang benar dan menyoldernya ke terminal NeoPixel. Setelah melakukan itu 14 kali, matriks saya akhirnya selesai! Selanjutnya, saya memeriksa dengan multimeter untuk memastikan bahwa tidak ada korsleting, karena korsleting akan menggoreng Nano, matriks, dan mungkin port USB Anda (saya tahu dari pengalaman). Unggah sketsa pengujian neomatrix dengan parameter "NEO_BOTTOM + NEO_LEFT + NEO_COLUMNS + NEO_ZIGZAG". Jika itu menggulir "howdy" di layar, Anda selesai dengan bagian tampilan!

Logikanya

Sebuah permainan pong memiliki beberapa objek:dayung, dinding, dan bola. Kode memiliki variabel bola X dan bola Y, yang melacak posisi bola. Arah bola ditangani oleh 1 atau -1 yang ditetapkan ke variabel arah. Dayung adalah persegi panjang yang dikontrol melalui potensiometer yang dipetakan ke 0 hingga 15. Y dayung tidak akan berubah, jadi variabel untuk pemetaan tidak diperlukan. Pada awal permainan, bola dimulai pada 1,1 dan pemain harus membiarkan bola memantul sekali untuk memulai. Fisika memperhitungkan arah bola dan di mana ia mengenai dayung.

Waktu yang menyenangkan!

Sekarang, cukup hubungkan matriks NeoPixel Arduino Nano Anda, +5V pada joystick ke 5v, GND ke Arduino GND, dan terakhir sumbu X ke A0. Bersenang-senang dengan permainan pong baru Anda! Coba tambahkan lebih banyak pemain dan fisika yang lebih baik untuk tantangan!

Kode

  • Kode Arduino
  • Kode Arduino
Kode ArduinoC/C++
#include #include #include #define PIN 6Adafruit_NeoMatrix matrix =Adafruit_NeoMatrix(15, 10, PIN, NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT + NEO_MATRIX_LEFT_ZEOKEO_MATRIX_ZEOKEO_MATRIX_ZEKEO_MATRIX_LEFT +;// variabel untuk posisi bola dan paddleint paddleX =0;int paddleY =0;int oldPaddleX, oldPaddleY;int ballDirectionX =1;int ballDirectionY =1;int score =0;int ballSpeed ​​=10; // angka yang lebih rendah lebih cepatint ballX, ballY, oldBallX, oldBallY;void setup() { Serial.begin(9600); // inisialisasi tampilan matrix.begin(); // matriks latar belakang hitam.fillScreen(0); matrix.setTextColor(matrix.Color(0,255,0)); matrix.print("PERGI"); matriks.tampilkan(); penundaan(2000); matrix.fillScreen(0); matrix.show();}void loop() { // menyimpan lebar dan tinggi layar int myWidth =matrix.width(); int myHeight =matriks.height(); // memetakan lokasi dayung ke posisi potensiometer paddleX =map(analogRead(A0), 0, 1023, 0, 12); dayungY =8; // atur warna isian menjadi hitam dan hapus // posisi dayung sebelumnya jika berbeda dari sekarang if (oldPaddleX !=paddleX || oldPaddleY !=paddleY) { matrix.fillRect(oldPaddleX, oldPaddleY, 4, 1,matrix. Warna(0,0,0)); } // menggambar dayung di layar, simpan posisi saat ini // seperti sebelumnya.//if(paddleX>=0 &&paddleX <=11){ matrix.fillRect(paddleX, paddleY, 4, 1,matrix.Color( 0,0,255));//}//else if(paddleX <0){ //paddleX =0; //matrix.fillRect(paddleX, paddleY, 3, 1,matrix.Color(0,0,255));//}//else if(paddleX>=13){ //} oldPaddleX =paddleX; oldPaddleY =dayungY; matriks.tampilkan(); // perbarui posisi bola dan gambarkan di layar if (millis() % ballSpeed ​​<2) { moveBall(); } matriks.tampilkan(); if(bola> 8 &&(milis()> 10000)){ skor +=1; matrix.fillScreen(0); matrix.setTextColor(matrix.Color(255,0,0)); matrix.setCursor(0,2); matrix.print(String(skor)); matriks.tampilkan(); penundaan (4000); bolaX =acak(3,11); bolaY =acak(1,1); matrix.fillScreen(0); matriks.tampilkan(); penundaan (1000); } delay(5);}// fungsi ini menentukan posisi bola di screenvoid moveBall() { // jika bola keluar dari layar, membalikkan arah:if (ballX> matrix.width() - 1 || ballX <0) { ballDirectionX =-ballDirectionX; } if (ballY> matrix.height() || ballY <0) { ballDirectionY =-ballDirectionY; } // periksa apakah bola dan dayung menempati ruang yang sama di layar if (inPaddle(ballX, ballY, paddleX, paddleY, 4, 1)) { if(ballX ==paddleX &&ballY ==paddleY){ ballDirectionX =- arah bolaX; ballDirectionY =-ballDirectionY; } else if(ballX ==paddleX + 3 &&ballY ==paddleY){ ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; } else if(ballX ==paddleX + 1 &&ballY ==paddleY){ ballDirectionX =-ballDirectionX; ballDirectionY =-ballDirectionY; } else if(ballX ==paddleX + 2 &&ballY ==paddleY){ ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; } } // memperbarui posisi bola ballX +=ballDirectionX; bolaY +=arah bolaY; // hapus posisi bola sebelumnya if (oldBallX !=ballX || oldBallY !=ballY) { matrix.drawPixel(oldBallX, oldBallY,matrix.Color(0,0,0)); } // menggambar posisi bola saat ini matrix.drawPixel(ballX, ballY,matrix.Color(150,150,0)); oldBallX =bolaX; oldBallY =ballY;}// fungsi ini memeriksa posisi bola// untuk melihat apakah bola itu berpotongan dengan paddleboolean inPaddle(int x, int y, int rectX, int rectY, int rectWidth, int rectHeight) { boolean result =false; if ((x>=rectX &&x <=(rectX + rectWidth)) &&(y>=rectY &&y <=(rectY + rectHeight))) { result =true; } mengembalikan hasil;}
Kode ArduinoC/C++
#include #include #include #define PIN 6Adafruit_NeoMatrix matrix =Adafruit_NeoMatrix(15, 10, PIN, NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT + NEO_MATRIX_LEFT_ZEOKEO_MATRIX_ZEOKEO_MATRIX_ZEKEO_MATRIX_LEFT +;// variabel untuk posisi bola dan paddleint paddleX =0;int paddleY =0;int oldPaddleX, oldPaddleY;int ballDirectionX =1;int ballDirectionY =1;int score =0;int ballSpeed ​​=10; // angka yang lebih rendah lebih cepatint ballX, ballY, oldBallX, oldBallY;void setup() { Serial.begin(9600); // inisialisasi tampilan matrix.begin(); // matriks latar belakang hitam.fillScreen(0); matrix.setTextColor(matrix.Color(0,255,0)); matrix.print("PERGI"); matriks.tampilkan(); penundaan(2000); matrix.fillScreen(0); matrix.show();}void loop() { // menyimpan lebar dan tinggi layar int myWidth =matrix.width(); int myHeight =matriks.height(); // memetakan lokasi dayung ke posisi potensiometer paddleX =map(analogRead(A0), 0, 1023, 0, 12); dayungY =8; // atur warna isian menjadi hitam dan hapus // posisi dayung sebelumnya jika berbeda dari sekarang if (oldPaddleX !=paddleX || oldPaddleY !=paddleY) { matrix.fillRect(oldPaddleX, oldPaddleY, 4, 1,matrix. Warna(0,0,0)); } // menggambar dayung di layar, simpan posisi saat ini // seperti sebelumnya.//if(paddleX>=0 &&paddleX <=11){ matrix.fillRect(paddleX, paddleY, 4, 1,matrix.Color( 0,0,255));//}//else if(paddleX <0){ //paddleX =0; //matrix.fillRect(paddleX, paddleY, 3, 1,matrix.Color(0,0,255));//}//else if(paddleX>=13){ //} oldPaddleX =paddleX; oldPaddleY =dayungY; matriks.tampilkan(); // perbarui posisi bola dan gambarkan di layar if (millis() % ballSpeed ​​<2) { moveBall(); } matriks.tampilkan(); if(bola> 8 &&(milis()> 10000)){ skor +=1; matrix.fillScreen(0); matrix.setTextColor(matrix.Color(255,0,0)); matrix.setCursor(0,2); matrix.print(String(skor)); matriks.tampilkan(); penundaan (4000); bolaX =acak(3,11); bolaY =acak(1,1); matrix.fillScreen(0); matriks.tampilkan(); penundaan (1000); } delay(5);}// fungsi ini menentukan posisi bola di screenvoid moveBall() { // jika bola keluar dari layar, membalikkan arah:if (ballX> matrix.width() - 1 || ballX <0) { ballDirectionX =-ballDirectionX; } if (ballY> matrix.height() || ballY <0) { ballDirectionY =-ballDirectionY; } // periksa apakah bola dan dayung menempati ruang yang sama di layar if (inPaddle(ballX, ballY, paddleX, paddleY, 4, 1)) { if(ballX ==paddleX &&ballY ==paddleY){ ballDirectionX =- arah bolaX; ballDirectionY =-ballDirectionY; } else if(ballX ==paddleX + 3 &&ballY ==paddleY){ ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; } else if(ballX ==paddleX + 1 &&ballY ==paddleY){ ballDirectionX =-ballDirectionX; ballDirectionY =-ballDirectionY; } else if(ballX ==paddleX + 2 &&ballY ==paddleY){ ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; } } // memperbarui posisi bola ballX +=ballDirectionX; bolaY +=arah bolaY; // hapus posisi bola sebelumnya if (oldBallX !=ballX || oldBallY !=ballY) { matrix.drawPixel(oldBallX, oldBallY,matrix.Color(0,0,0)); } // menggambar posisi bola saat ini matrix.drawPixel(ballX, ballY,matrix.Color(150,150,0)); oldBallX =bolaX; oldBallY =ballY;}// fungsi ini memeriksa posisi bola// untuk melihat apakah bola itu berpotongan dengan paddleboolean inPaddle(int x, int y, int rectX, int rectY, int rectWidth, int rectHeight) { boolean result =false; if ((x>=rectX &&x <=(rectX + rectWidth)) &&(y>=rectY &&y <=(rectY + rectHeight))) { result =true; } mengembalikan hasil;}

Skema


Proses manufaktur

  1. Detektor Bahasa TinyML Berbasis Edge Impulse &Arduino
  2. Game Arduino Gyroscope dengan MPU-6050
  3. Arduino Digital Dice
  4. Iron Man
  5. Temukan Saya
  6. Kontrol Humidifier Arduino
  7. Sonar menggunakan arduino dan ditampilkan pada pemrosesan IDE
  8. MobBob:Robot Arduino DIY Dikendalikan oleh Smartphone Android
  9. Lampu Meja Reaktif Audio Arduino
  10. Arduino Joystick