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

Game Arduino Dengan LCD

Komponen dan persediaan

Arduino UNO
× 1
Adafruit RGB Backlight LCD - 16x2
× 1
Breadboard (generik)
× 1
Resistor 220 ohm
× 1
Sakelar Tombol Tekan SparkFun 12mm
× 1
Kabel jumper (generik)
× 1
Kabel USB-A ke B
× 1

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Bagian-bagian yang dibutuhkan ditunjukkan pada gambar di atas. Mulailah dengan Arduino tanpa daya. JANGAN mencolokkan kabel USB. Itu akan terjadi di langkah selanjutnya ketika tiba waktunya untuk memprogramnya dan mencoba permainannya.

Koneksi

Gunakan kabel penghubung panjang untuk menghubungkan sinyal 5V pada Arduino di paling kiri baris merah di bagian atas papan tempat memotong roti.

Gunakan kabel pengait panjang untuk menghubungkan sinyal GND ke paling kiri baris hitam (atau biru pada beberapa papan tempat memotong roti) di bagian atas papan tempat memotong roti.

Modul LCD (Liquid Crystal Display) memiliki header laki-laki 16-pin di bagian bawah. Tancapkan ini ke papan tempat memotong roti seperti yang ditunjukkan pada gambar. Semua sinyal elektronik yang memberi daya dan mengontrol LCD melewati header ini.

Pin ini (dari kiri ke kanan):

  • GND - sinyal arde daya
  • VCC - sinyal daya positif
  • V0 - penyesuaian kontras
  • RS - daftar pilih
  • R/W - pilih baca/tulis
  • E - sinyal pengaktifan operasi
  • DB0 - bit data 0 (tidak digunakan di sini)
  • DB1 - data bit 1 (tidak digunakan di sini)
  • DB2 - data bit 2 (tidak digunakan di sini)
  • DB3 - data bit 3 (tidak digunakan di sini)
  • DB4 - bit data 4
  • DB5 - bit data 5
  • DB6 - bit data 6
  • DB7 - bit data 7
  • LED+ - LED lampu latar positif
  • LED- - LED lampu latar negatif

Menggunakan kabel penghubung pendek, sambungkan GND dan LED- (pin 1 dan 16) ke baris hitam di atas.

Demikian pula, sambungkan VCC (pin 2) ke baris merah di atas dengan kabel penghubung pendek.

Tekuk kabel resistor 220 (pita berwarna merah-merah-coklat) dan hubungkan antara LED+ dan baris merah di bagian atas papan tempat memotong roti.

Gunakan kabel penghubung yang lebih panjang untuk membuat sisa koneksi:

  • Hubungkan DB7 ke pin 3 Arduino
  • Hubungkan DB6 ke pin 4 Arduino
  • Hubungkan DB5 ke pin 5 Arduino
  • Hubungkan DB4 ke pin 6 Arduino
  • Hubungkan E ke pin 9 Arduino
  • Hubungkan R/W ke pin Arduino 10 (atau ke baris hitam di atas papan tempat memotong roti)
  • Hubungkan RS ke pin Arduino 11
  • Hubungkan V0 ke Arduino pin 12 (atau ke baris hitam di atas papan tempat memotong roti)

Pasang tombol tekan di suatu tempat di sebelah kiri layar LCD, mengangkangi saluran yang berjalan di sepanjang bagian tengah papan tempat memotong roti (lihat gambar di atas). Hubungkan salah satu dari dua pin atas tombol ke baris hitam di bagian atas papan tempat memotong roti menggunakan kabel hookup pendek. Hubungkan pin lain di bagian atas tombol ke pin 2 Arduino.

Kode

  • LCD_Game.ino
LCD_Game.inoArduino
#termasuk #menentukan PIN_BUTTON 2#menentukan PIN_AUTOPLAY 1#menentukan PIN_READWRITE 10#menentukan PIN_CONTRAST 12#menentukan SPRITE_RUN1 1#menentukan SPRITE_RUN2 2#menentukan SPRITE_JUMP 3#menentukan SPRITE_JUMP // Menggunakan '.' //menentukan karakter untuk kepala#menentukan SPRITE_JUMP_LOWER 4#menentukan SPRITE_TERRAIN_EMPTY ' ' // Menggunakan karakter ' '#menentukan SPRITE_TERRAIN_SOLID 5#menentukan SPRITE_TERRAIN_SOLID_RIGHT 6#menentukan SPRITE_TERRAIN_TERRAIN_SOLID posisi horizontal pada layar HORID_#POSIHORID_LEFT. TERRAIN_EMPTY 0#menentukan TERRAIN_LOWER_BLOCK 1#mendefinisikan TERRAIN_UPPER_BLOCK 2#menentukan HERO_POSITION_OFF 0 // Pahlawan tidak terlihat#mendefinisikan HERO_POSITION_RUN_LOWER_1 1 // Pahlawan berlari di baris bawah (pose 1)#menentukan HERO_POSER_2_POSITION_JULI_POS_2 / // (HERO_POSER_1_POSITION_RUN_POSITION_POSITION 2 / Memulai lompatan#menentukan HERO_POSITION_JUMP_2 4 // Naik setengah jalan#menentukan HERO_POSITION_JUMP_3 5 // Melompat ada di baris atas#menentukan HERO_POSITION_JUMP_4 6 // Melompat ada di baris atas#menentukan HERO_POSITION_JUMP_5 7 // Melompat ada di baris atas#mendefinisikan HERO_POSITION_JUMP_POSITION_JUMP_POSITION_ 8 // Lompat ada di baris atas#menentukan HERO_POSITION_JUMP_7 9 // Setengah jalan ke bawah#menentukan HERO_POSITION_JUMP_8 10 // Tentang mendarat#menentukan HERO_POSITION_RUN_UPPER_1 11 // Pahlawan berlari di baris atas (pose 1)#define HERO_POSITION_RUN_UPPER_2 12 // (pose 2)LiquidCrystal lcd(11, 9, 6, 5, 4, 3);static char terrainUpper[TERRAIN_WIDTH + 1];static char terrainLower [TERRAIN_WIDTH + 1];tombol bool statisPushed =false;void initializeGraphics(){ static byte graphics[] ={ // Jalankan posisi 1 B01100, B01100, B00000, B01110, B11100, B01100, B11010, B10011, // Jalankan posisi 2 B01100, B01100, B00000, B01100, B01100, B01100, B01100, B01110, // Lompat B01100, B01100, B00000, B11110, B01101, B11111, B10000, B00000, // Lompat ke bawah B11110, B01101, B11111, B10000, B00000, B00000 , B00000, B00000, // Ground B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111, // Ground kanan B00011, B00011, B00011, B00011, B00011, B00011, B00011, B00011, // Ground kiri B11000, B11000, B11000, B11000, B11000, B11000, B11000, B11000, }; di aku; // Lewati menggunakan karakter 0, ini memungkinkan lcd.print() digunakan untuk // menggambar banyak karakter dengan cepat untuk (i =0; i <7; ++i) { lcd.createChar(i + 1, &graphics[i * 8]); } untuk (i =0; i  9999) ? 5 :(skor> 999) ? 4 :(skor> 99) ? 3 :(skor> 9) ? 2 :1; // Gambar pemandangan terrainUpper[TERRAIN_WIDTH] ='\0'; medanLower[TERRAIN_WIDTH] ='\0'; char temp =terrainUpper[16-digit]; medanUpper[16-digit] ='\0'; lcd.setCursor(0,0); lcd.print(terrainUpper); medanUpper[16-digit] =suhu; lcd.setCursor(0,1); lcd.print(terrainLower); lcd.setCursor(16 - angka,0); lcd.print(skor); medanUpper[HERO_HORIZONTAL_POSITION] =simpanan atas; medanLower[HERO_HORIZONTAL_POSITION] =lebih rendahSimpan; kembali bertabrakan;}// Tangani push tombol sebagai tombolPush() interupsivoid { buttonPushed =true;}pengaturan batal(){ pinMode(PIN_READWRITE, OUTPUT); digitalWrite(PIN_READWRITE, RENDAH); pinMode(PIN_CONTRAST, OUTPUT); digitalWrite(PIN_CONTRAST, RENDAH); pinMode(PIN_BUTTON, INPUT); digitalWrite(PIN_BUTTON, TINGGI); pinMode(PIN_AUTOPLAY, OUTPUT); digitalWrite(PIN_AUTOPLAY, TINGGI); // Pin digital 2 memetakan untuk menginterupsi 0 attachInterrupt(0/*PIN_BUTTON*/, buttonPush, FALLING); initializeGraphics(); lcd.begin(16, 2);}void loop(){ byte statis heroPos =HERO_POSITION_RUN_LOWER_1; byte static newTerrainType =TERRAIN_EMPTY; byte statis newTerrainDuration =1; bermain bool statis =salah; kedipan bola statis =salah; static unsigned int distance =0; if (!playing) { drawHero((blink) ? HERO_POSITION_OFF :heroPos, terrainUpper, terrainLower, distance>> 3); if (berkedip) { lcd.setCursor(0,0); lcd.print("Tekan Mulai"); } penundaan (250); berkedip =!berkedip; if (tombolDidorong) { initializeGraphics(); heroPos =HERO_POSITION_RUN_LOWER_1; bermain =benar; buttonPushed =salah; jarak =0; } kembali; } // Geser medan ke kiri advanceTerrain(terrainLower, newTerrainType ==TERRAIN_LOWER_BLOCK ? SPRITE_TERRAIN_SOLID :SPRITE_TERRAIN_EMPTY); advanceTerrain(terrainUpper, newTerrainType ==TERRAIN_UPPER_BLOCK ? SPRITE_TERRAIN_SOLID :SPRITE_TERRAIN_EMPTY); // Buat medan baru untuk dimasuki di sebelah kanan if (--newTerrainDuration ==0) { if (newTerrainType ==TERRAIN_EMPTY) { newTerrainType =(random(3) ==0) ? TERRAIN_UPPER_BLOCK :TERRAIN_LOWER_BLOCK; newTerrainDuration =2 + acak(10); } else { newTerrainType =TERRAIN_EMPTY; newTerrainDuration =10 + acak(10); } } if (buttonPushed) { if (heroPos <=HERO_POSITION_RUN_LOWER_2) heroPos =HERO_POSITION_JUMP_1; buttonPushed =salah; } if (drawHero(heroPos, terrainUpper, terrainLower, distance>> 3)) { bermain =false; // Pahlawan bertabrakan dengan sesuatu. Sangat buruk. } else { if (heroPos ==HERO_POSITION_RUN_LOWER_2 || heroPos ==HERO_POSITION_JUMP_8) { heroPos =HERO_POSITION_RUN_LOWER_1; } else if ((heroPos>=HERO_POSITION_JUMP_3 &&heroPos <=HERO_POSITION_JUMP_5) &&terrainLower[HERO_HORIZONTAL_POSITION] !=SPRITE_TERRAIN_EMPTY) { heroPos =HERO_POSITION_RUN_UPPER_1; } else if (heroPos>=HERO_POSITION_RUN_UPPER_1 &&terrainLower[HERO_HORIZONTAL_POSITION] ==SPRITE_TERRAIN_EMPTY) { heroPos =HERO_POSITION_JUMP_5; } else if (heroPos ==HERO_POSITION_RUN_UPPER_2) { heroPos =HERO_POSITION_RUN_UPPER_1; } else { ++heroPos; } ++jarak; digitalWrite(PIN_AUTOPLAY, terrainLower[HERO_HORIZONTAL_POSITION + 2] ==SPRITE_TERRAIN_EMPTY ? HIGH :LOW); } delay(100);}

Skema

Tidak ada dokumen.


Proses manufaktur

  1. Detektor Bahasa TinyML Berbasis Edge Impulse &Arduino
  2. Game Arduino Gyroscope dengan MPU-6050
  3. Arduino Digital Dice
  4. Game Roulette LED 37 DIY
  5. Pengontrol Game Arduino
  6. Game Joystick
  7. Temukan Saya
  8. Game Pixel Chaser
  9. Osiloskop DIY 10Hz-50kHz pada Layar LCD 128x64
  10. Lampu Meja Reaktif Audio Arduino