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

Jam Arkade Retro

Komponen dan persediaan

Arduino Mega 2560
× 1

Alat dan mesin yang diperlukan

Printer 3D (generik)

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Intro:Jam Retro Arcade - Arduino

Buat jam arcade interaktif di samping tempat tidur, dengan layar sentuh, dan figur arcade animasi yang dapat Anda rekam suara alarm pilihan Anda.

Proyek ini mencakup kotak cetak 3D dan empat program terpisah untuk dipilih

1. Arcade Clock - DK Mario, Space Invaders, dan animasi Pac-Man

2. Jam Pacman - Game Pac-Man animasi interaktif dengan fungsi jam

3. DK Clock - Game DK animasi interaktif dengan fungsi jam

4. Tumble Ghost - Game hantu Pac-Man animasi berdasarkan Flappy Bird

Sangat menyenangkan untuk dibangun dan hadiah yang bagus untuk siapa saja yang suka menghidupkan kembali nostalgia karakter game arcade tahun 80-an.

Langkah 1:Kumpulkan Bahan

  • Arduino Board - Arduino Mega 2560 (Item 1, 2 dan 3 dapat dibeli sebagai satu paket pesanan)
  • Perisai Arduino Layar Sentuh - Pelindung papan ekspansi LCD Mega Touch 3.2"
  • Layar sentuh - Layar LCD TFT 3,2" + layar sentuh untuk Arduino Mega 2560
  • Modul jam waktu nyata - DS3231 RTC
  • Modul perekam suara - perekam suara ISD1820
  • Filamen PLA untuk printer 3D
  • Resin epoksi dua bagian untuk merekatkan wadah
  • Kabel USB Pengisi daya USB sepanjang 2m (digunakan untuk catu daya jam)
  • Pistol lem panas
  • Pengikat kabel X 3

Komponen peredupan lampu latar otomatis opsional hanya diperlukan jika jam di samping tempat tidur:

  • Resistor 270k ohm
  • Dioda Zener 3.3v
  • Resistor 0,5 watt 47 ohm
  • Resistor bergantung cahaya (LDR)

Langkah 2:Cetak Kasus 3D

Saya mencetak kotak jam pada Creality Ender 3. Semua file cetak 3D dan instruksi untuk kasing dapat ditemukan di sini di Thingiverse.

Langkah 3:Bangun Sirkuit

Sirkuit keseluruhan berisi Jam waktu nyata, Arduino Mega, modul suara, layar sentuh, dan pelindung layar.

1. Jam Waktu Nyata

Pasang jam real-time di bagian belakang Arduino Mega seperti pada gambar yang disediakan. Saya menggunakan pistol lem panas dan busa pengepakan untuk memastikan mereka tidak bersentuhan dan ada beberapa bantalan untuk menyerap gerakan. Dalam kasus saya, saya menyolder 2 kaki RTC langsung ke Arduino dan menggunakan kabel penghubung untuk menghubungkan 5v dan GND ke Arduino.

2. Modul Perekaman Suara

Ini benar-benar keren dan mudah digunakan. Dengan cara yang sama seperti di atas, gunakan busa dan lem panas untuk menempatkan modul dan speaker di bagian belakang Arduino dengan hati-hati untuk memastikan mereka terisolasi dari sentuhan. Modul Suara dipicu oleh D8 pada Arduino, jadi ini dan catu daya perlu dihubungkan sesuai diagram rangkaian yang disediakan.

3. Peredup Lampu Latar Otomatis (Opsional)

Jika Anda berniat menggunakannya sebagai jam samping tempat tidur, maka Anda mungkin ingin meredupkan lampu latar secara otomatis di malam hari sehingga tidak memengaruhi tidur Anda. (Jika tidak, Anda dapat melewati langkah ini!) Sayangnya, lampu latar di layar TFT terprogram menjadi +3.3v dan tidak dapat disesuaikan dengan Arduino. Ini berarti kita harus memutuskannya dan menyambungkannya kembali ke pin PWM di Arduino untuk mengontrol kecerahan Lampu Latar. Saya ingin melakukan ini dengan kerusakan minimal pada pin atau trek pada komponen, jadi ambil pendekatan berikut. Ikuti langkah-langkah di bawah ini dengan seksama

(a) Untuk mencapai ini, Light Dependent Resistor (LDR) ditempatkan di bagian belakang unit untuk mendeteksi cahaya. Bor dua lubang 3mm di kasing dan dorong kaki LDR melalui lubang. Gunakan lem panas di bagian dalam kabinet untuk menahan kaki di tempatnya. Solder dua kabel di bagian dalam kasing dan sambungkan sesuai diagram sirkuit. Tambahkan Resistor 270k Ohm ke A7 Arduino sesuai diagram sirkuit.

(b) Lepaskan Layar TFT, dan letakkan di permukaan yang kokoh. Identifikasi pin 19 (LED_A) dan lepaskan beberapa milimeter plastik dengan hati-hati di dasar pin. Tekuk pin hingga rata dan menjauh dari konektor seperti pada gambar di atas. Periksa apakah TFT Sheild dapat dipasang dengan pas dan pin yang tertekuk tidak menghalangi steker atau soket.

(c) Solder register 47 Ohm ke pin yang ditekuk dan sambungkan kabel dari resistor ke D9 Arduino Mega. Pin Arduino D9 dapat tenggelam hingga 40mA sehingga resistor membatasi ini hingga kurang dari ini. Pasang Dioda Zener 3.3v ke pin yang sama (LED_A) dan hubungkan ke arde sesuai diagram. Tujuannya adalah untuk melindungi lampu latar dari tegangan lebih karena akan mengatur tegangan menjadi 3,3v.

4. Layar TFT dan Perisai Arduino

Dorong konektor layar sentuh TFT 3,2 'dengan hati-hati ke dalam TFT Arduino Shield. Kemudian sambungkan dengan hati-hati ke bagian atas Arduino sesuai gambar yang disediakan. RTC memiliki baterai sehingga akan mempertahankan waktu yang tepat bahkan jika daya telah dicabut. Waktu Alarm disimpan di Eeprom di Arduino yang artinya akan dipertahankan jika terjadi pemadaman listrik.

Langkah 4:Muat Kode

Proyek akan membutuhkan file dan pustaka berikut untuk dimuat sebelum dikompilasi dan dijalankan. Kode ini unik dan dibangun berdasarkan kemampuan perpustakaan, perangkat keras, beberapa grafik khusus, dan proyek lain yang saya pinjam.

Harap Dicatat:Pengembangan kode untuk proyek ini telah menggunakan IDE v1.06 dan beberapa pustaka yang diperlukan sudah ketinggalan zaman. Ini berarti beberapa orang mengalami masalah dengan IDE baru versi 1.6 ke atas saat memuat kode. Oleh karena itu, demi kesederhanaan, saya menyarankan orang-orang menggunakan IDE v1.06 dan telah menyertakan file pustaka versi yang benar dalam file zip di bagian bawah langkah 4 tutorial.

1. Arduino IDE

Saya telah menggunakan Arduino IDE versi sebelumnya, oleh karena itu demi kesederhanaan, saya sarankan Anda mengunduh Arduino IDE versi 1.06 di mesin desktop Anda sebelum Anda menginstal kode. Anda bisa mendapatkan versinya dari sini.

2. Perpustakaan

Ini perlu diunduh dan ditambahkan ke IDE (Integrated Development Environment) yang berjalan di komputer Anda, yang digunakan untuk menulis dan mengunggah kode komputer ke papan fisik.

  • UTFT.h dan URtouch.h terletak di file zip di bawah
  • Waktu.h terletak di file zip di bawah
  • DS1307RTC.h terletak di file zip di bawah
  • Wire.h dan EEPROM.h sudah termasuk dalam IDE V1.06

Kredit untuk UTFT.h dan URtouch.h masuk ke Rinky-Dink Electronics Saya telah menyertakan file zip ini karena tampaknya situs web sumber sedang tidak aktif.

4. Variasi Layar TFT

Ketidakjelasan layar TFT dan produsen telah menyebabkan catatan ini.

(a) Sainsmart - Jika Anda telah membeli layar TFT 3,2 'yang bermerek Sainsmart di bagian belakang perangkat TFT, Anda akan menemukan bahwa mereka harus memodifikasi perpustakaan untuk menyelesaikan masalah tampilan. Jika Anda telah membeli Tampilan TFT Sainsmart sudah ada perbaikan di bawah ini

Edit file "initlcd.h" dan ubah baris berikut dari

LCD_Write_COM_DATA(0x01, 0x2B3F);

ke

LCD_Tulis_COM_DATA(0x01, 0x3B3F);

Anda perlu me-restart IDE dan kemudian memuat ulang kode ke Arduino.

(b.) Chipset Pengontrol TFT - Orang yang telah membeli layar TFT 3,2" mungkin menemukan bahwa mereka juga dapat memiliki salah satu dari dua chipset yang berbeda "SSD1289" atau "ILI9341" Hal yang mengganggu adalah bahwa tidak mudah untuk membedakan perbedaan secara online. Kabar baiknya adalah bahwa mudah untuk memperbaikinya. Jika Anda mendapatkan layar kosong setelah memuat kode, itu mungkin karena itu adalah pengontrol ILI9341.

Untuk memperbaikinya, Anda perlu membuat perubahan berikut pada kode. Edit kode dan ubah baris kode berikut

dari

UTFT myGLCD(SSD1289, 38, 39, 40, 41); //Parameter harus disesuaikan dengan model Tampilan/Schield Anda

ke

UTFT myGLCD(ILI9341_16, 38, 39, 40, 41); //Parameter harus disesuaikan dengan model Tampilan/Schield Anda

Sekarang coba muat ulang kode ke Arduino.

(c.) Kontrol Layar Sentuh Terbalik

Beberapa pembuat telah melaporkan bahwa tombol layar sentuh sumbu Y telah dibalik. Perbaikan untuk ini diidentifikasi di mana dua baris kode harus diubah untuk membalik pembacaan layar sentuh.

Lakukan pencarian untuk:"yT =myTouch.getY();" Ubah menjadi:"yT =240 - myTouch.getY();"

Jangan lupa untuk mencari dua kali, yang pertama adalah untuk mengontrol pacman dalam mode jam, yang kedua untuk di menu pengaturan.

5. File Grafik

Ada sekelompok file bitmap yang saya sertakan di bawah ini yang perlu ditempatkan di subdirektori yang sama dengan kode Arduino ketika Anda mulai memuat ke Arduino. Oleh karena itu unduh file di bawah ini dan gunakan IDE untuk memuat.

6. Siapkan Jam

Setelah kode berhasil dimuat, tekan bagian tengah layar dan ini akan memunculkan layar pengaturan. Gunakan menu untuk mengatur waktu dan alarm dalam format 24 jam. Tekan tombol SIMPAN untuk menyimpan pengaturan. RTC memiliki baterai sehingga akan mempertahankan waktu yang tepat bahkan jika daya telah dicabut. Waktu Alarm disimpan di EEPROM yang artinya akan dipertahankan jika terjadi pemadaman listrik.

7. Menguji Alarm

Modul Suara digunakan untuk menyediakan Alarm. ISD1820 dikendalikan oleh pin Arduino D8. Suara dapat dengan mudah ditambahkan dengan memutar suara ke mikrofon sambil menekan tombol rekam pada ISD1820 secara bersamaan. Dalam kasus saya, saya merekam musik pengantar Pac-Man asli dari file audio yang diputar melalui perangkat lain. Setelah suara direkam, rekaman dapat diuji dengan menekan tombol PLAY-E yang seharusnya memutar suara melalui speaker. Gunakan menu pengaturan untuk mengatur waktu jam dan waktu alarm beberapa menit. Pastikan untuk "SET" alarm dan tekan tombol menu "SIMPAN". Setelah kembali ke layar utama, Alarm akan berbunyi saat waktunya tiba. Mematikan Alarm dapat dilakukan dengan menekan bagian tengah panel touchscreen sehingga muncul Setup Screen.

8. Kalibrasi Layar Sentuh

Beberapa pembuat telah menemukan bahwa tombol pada layar pengaturan tidak sejajar dengan kontrol sentuh TFT. Dalam kasus ini, layar sentuh membutuhkan kalibrasi. Ini dapat dengan mudah dilakukan dengan menggunakan kode kalibrasi layar sentuh dan instruksi yang disediakan di perpustakaan URtouch. Ikuti petunjuk ini jika Anda mengamati masalah ini.

9. Empat Program Berbeda untuk dipilih

1. Arcade Clock - DK Mario, Space Invaders &animasi Pacman2. Jam Pacman - Permainan Pacman/Ms Pacman Animasi Interaktif dengan fungsi jam

3. Jam DK - Game DK Animasi Interaktif dengan fungsi jam

4. Tumble Ghost - Game animasi Pacman Ghost berbasis Flappy Bird

1.%2BRetroArcadeClockTechKiwigadgetsV1.zip 2.%2BRetro_Pacman_Clock_V10.zip 3.%2BRetro_DK_Clock_V3.zip 4.%2BTumble_Ghost_V10.zip DS1307RTC.zip Time.zip URTouch.zip UTFT.zip

Langkah 5:Menyatukan Semuanya

1. Menambahkan Daya Eksternal

Langkah terakhir adalah menambahkan daya eksternal. Dengan menggunakan mata bor, tambahkan lubang di bagian belakang kabinet. Masukkan kabel USB melalui panel belakang dan kemudian pasang kabel USB kabel VCC, GND, D+ dan D- ke dasar Konektor USB Arduino sesuai dengan diagram rangkaian. Ini memiliki dua keuntungan, pertama input USB ke Arduino Mega Board memiliki perlindungan arus berlebih, dan kedua, Anda dapat menggunakan kabel USB untuk mengunggah perubahan kode tanpa harus membongkar kotak. Rekatkan isolasi kabel listrik ke bagian belakang Arduino untuk memberikan perlindungan dari tegangan kabel saat merakit panel depan dan belakang. Tambahkan cord grip pada kabel dengan cara memasang pengikat kabel erat-erat di sekeliling kabel pada bagian dalam casing pada kabel power 6-8 cm dari sambungan Arduino. Pengikat kabel harus menghindari ketegangan pada sambungan saat kabel USB ditarik dengan membentur bagian dalam casing.

2. Memasang Elektronik dalam casing

Tempatkan sirkuit di atas panel depan dengan empat pemandu lubang yang harus menyelaraskan layar secara terpusat di potongan. Nyalakan sirkuit sehingga Anda dapat melihat layar panel depan, periksa gambar layar pada posisi yang benar lalu rekatkan dengan lem panas. Hasilnya pas dengan layar persegi yang dipusatkan di lubang guntingan.

3. Majelis Akhir

Dorong perlahan panel depan ke panel belakang dan tarik perlahan kabel daya USB untuk mengangkat kendur di panel belakang. Pegangan kabel berguna di sini dan harus melindungi segala kerusakan pada kabel. Colokkan ke pengisi daya USB dan Anda siap menggunakannya.

Saya harap Anda menikmati!

Kode

  • Jam Arkade Retro
Jam Arkade RetroC/C++
Arduino IDE
/* Retro Arcade Clock - TechKiwigadgets V1 - Rilis Produksi Pertama*/ #include  #include #include #include  #include  #include  // pustaka DS1307 dasar yang mengembalikan waktu sebagai time_t// Variabel Alarmsboolean alarmstatus =false; // tandai di mana false tidak aktif dan true adalah onboolean soundalarm =false; // Tandai untuk menunjukkan alarm perlu dimulaiint alarmhour =0; // jam pengaturan alarmint alarmminute =0; // Menit alarm setingbyte per jam; //Variabel byte untuk jam byte amin; //Variabel byte untuk actr minuteint =300; // Saat alarm berbunyi, ini adalah penghitung yang digunakan untuk mengatur ulang kartu suara hingga layar disentuhint act =0;int p =0; // Posisi animasi E.G Pacman Graphic Flag 0 =Tertutup, 1 =Sedang Terbuka, 2 =Terbuka Lebar, 3 =Sedang Terbukaint m =0; // Posisi animasi mario 3 posisi// Grafik X,Y koordinat// myGLCD.drawBitmap (30, 14, 40, 40, rd_ghost); // Tutup Ghostint ghostX =15;int ghostY =14;int ghostD =0; // arah d ==0 =kanan, 1 =bawah, 2 =kiri, 3 =atas // myGLCD.drawBitmap (140, 14, 40, 40, MarioR3); // Tutup Ghostint MarioX =141;int MarioY =14;int MarioD =0; // arah d ==0 =kanan, 1 =bawah, 2 =kiri, 3 =atas // myGLCD.drawBitmap (240, 14, 40, 40, Monkey2); // Tutup Ghostint MonkeyX =261;int MonkeyY =14;int MonkeyD =0; // arah d ==0 =kanan, 1 =bawah, 2 =kiri, 3 =atas // myGLCD.drawBitmap (30, 180, 40, 40, pacman); // Tutup Ghostint pacmanX =15;int pacmanY =185;int pacmanD =2; // arah d ==0 =kanan, 1 =bawah, 2 =kiri, 3 =atas// myGLCD.drawBitmap (140, 180, 40, 40, Alien); // Tutup Ghostint AlienX =141;int AlienY =185;int AlienD =2; // arah d ==0 =kanan, 1 =bawah, 2 =kiri, 3 =atas// myGLCD.drawBitmap (240, 180, 40, 40, Cannon); // Hantu Tertutup int CannonX =270;int CannonY =185;int CannonD =2; // arah d ==0 =kanan, 1 =bawah, 2 =kiri, 3 =atas// Menginisialisasi nilai waktu RTC:const int DS1307 =0x68; // Alamat DS1307 lihat lembar data// Tampilan Dimmer Variablesint dimscreen =255; // Variabel ini digunakan untuk mengatur kecerahan layar dimana 255 adalah kecerahan maksimumint LDR =100; // Variabel LDR diukur langsung dari Analog 7//====Creating ObjectsUTFT myGLCD(SSD1289,38,39,40,41); //Parameter harus disesuaikan dengan model Tampilan/Schield AndaURTouch myTouch( 6, 5, 4, 3, 2);//====Mendefinisikan Fontsextern uint8_t SmallFont[];extern uint8_t BigFont[];extern uint8_t SevenSegNumFont[]; extern uint8_t SevenSeg_XXXL_Num[];// Tentukan bitmapsextern unsigned int Alien1[0x640]; // Alien 1 graphicextern unsigned int Alien2[0x640]; // Alien 2 graphicextern unsigned int Cannon[0x640]; // Space penyerbu cannonextern unsigned int MarioL1[0x310]; // M Kiri 1extern unsigned int MarioL2[0x310]; // Ghost Bitmap Straight forwardextern unsigned int MarioL3[0x310]; // Ghost Bitmap Straight forwardextern unsigned int MarioR1[0x310]; // Ghost Bitmap Straight forwardextern unsigned int MarioR2[0x310]; // Ghost Bitmap Straight forwardextern unsigned int MarioR3[0x310]; // Ghost Bitmap Straight forwardextern unsigned int MarioStop[0x310]; // Ghost Bitmap Straight forwardextern unsigned int MarioU1[0x310]; // Ghost Bitmap Straight forwardextern unsigned int MarioU2[0x310]; // Ghost Bitmap Straight forwardextern unsigned int MarioU3[0x310]; // Ghost Bitmap Straight forwardextern unsigned int MarioU4[0x310]; // Ghost Bitmap Straight forwardextern unsigned int rd_ghost[784]; // Ghost Bitmap Straight forwardextern unsigned int ru_ghost[784]; // Ghost Bitmap Straight forwardextern unsigned int rl_ghost[784]; // Ghost Bitmap Straight forwardextern unsigned int rr_ghost[784]; // Ghost Bitmap Straight forwardextern unsigned int r_o_pacman[784]; // Ghost Bitmap Straight forwardextern unsigned int r_m_pacman[784]; // Ghost Bitmap Straight forwardextern unsigned int l_o_pacman[784]; // Ghost Bitmap Straight forwardextern unsigned int l_m_pacman[784]; // Ghost Bitmap Straight forwardextern unsigned int u_m_pacman[784]; // Ghost Bitmap Straight forwardextern unsigned int u_o_pacman[784]; // Ghost Bitmap Straight forwardextern unsigned int d_m_pacman[784]; // Ghost Bitmap Straight forwardextern unsigned int d_o_pacman[784]; // Ghost Bitmap Straight forwardextern unsigned int c_pacman[784]; // Ghost Bitmap Straight forwardextern unsigned int Monkey2[0x640]; // Ghost Bitmap Straight forwardextern unsigned int Monkey3[0x640]; // Ghost Bitmap Lurus ke depan// Koordinat layar sentuh boolean screenPressed =false;int xT,yT;int userT =4; // tandai untuk menunjukkan sentuhan arah pada screenboolean setupscreen =false; // digunakan untuk mengakses layar pengaturan // Variabel pengaturan alarmboolean xsetup =false; // Tandai untuk menentukan apakah mode penyiapan yang ada// Penundaan animasi untuk memperlambat gerakan turun dly =0; // Awalnya 30// Time Refresh counter int rfcvalue =300; // tunggu selama ini hingga waktu pemeriksaan untuk perubahanint rfc =1;// Deklarasikan variabel global untuk waktu sebelumnya, untuk mengaktifkan refesh hanya digit yang telah berubah// Ada empat digit yang perlu digambar secara independen untuk memastikan posisi waktu yang konsisten int c1 =20; // Angka puluhan jam int c2 =20; // Satuan jam digit int c3 =20; // Angka puluhan menit int c4 =20; // Satu menit pengaturan digitvoid() {//Inisialisasi RTC Serial.begin(9600); // while (!Serial); // tunggu sampai Arduino Serial Monitor membuka delay(200); setSyncProvider(RTC.get); // fungsi untuk mendapatkan waktu dari RTC setSyncInterval(60); // menyinkronkan waktu setiap 60 detik (1 menit) if(timeStatus()!=timeSet){ Serial.println("Tidak dapat menyinkronkan dengan RTC"); RTC.set(1408278800); // setel RTC ke 25 Agustus 2014 9:00 setTime(1408278800); } else{ Serial.println("RTC telah mengatur waktu sistem"); }// Setup Alarm mengaktifkan pin untuk memutar ulang suara pada board ISD1820 pinMode(8, OUTPUT); // D8 digunakan untuk mengaktifkan suara digitalWrite(8,LOW); // Atur ke rendah untuk mematikan suara // Memulai tampilan myGLCD.InitLCD(); myGLCD.clrScr(); myTouch.InitTouch(); myTouch.setPrecision(PREC_LOW); layar gambar(); // Memulai permainan UpdateDisp(); // perbarui nilai ke jam }void loop() {// kenaikan Pacman Graphic Flag 0 =Tertutup, 1 =Sedang Terbuka, 2 =Lebar Terbukap=p+1; jika(p==4){ p=0; // Setel ulang penghitung ke tertutup}// kenaikan Pacman Graphic Flag 0 =Tertutup, 1 =Terbuka Sedang, 2 =Terbuka Lebarm=m+1; jika(m==3){ m=0; // Setel ulang penghitung ke tertutup}// Setel Kecerahan Layar// Periksa cahaya sekitar dan sesuaikan kecerahan LED agar sesuai dengan Sekitar 500 gelap di bawah 100LDR =analogRead(A7);/* Rentang nilai uji LDR myGLCD.setColor(237, 28, 36); myGLCD.setBackColor(0, 0, 0); myGLCD.printNumI(LDR,250,60);*/if (LDR>=121){ layar redup =255; } if (LDR <=120) { layar redup =45; } analogWrite(9, layar redup); // Mengontrol kecerahan 0 adalah Gelap, Ruang sekitar kira-kira 25 dan 70 adalah sinar matahari langsung // Baca tanggal dan waktu saat ini dari RTC dan setel ulang boardrfc++; if (rfc>=rfcvalue) { // menghitung siklus dan waktu cetak UpdateDisp(); // perbarui nilai ke jam lalu ... dly =18; // reset penundaan rfc =0; }//====Periksa apakah Alarm perlu dibunyikan if (alarmstatus ==true){ if ( (alarmhour ==hour()) &&(alarmminute ==minute())) { // Bunyikan alarm soundalarm =true; } }//===Mulai Suara Alarm - Suara membayar selama 10 detik kemudian akan restart pada 20 detik markif ((alarmstatus ==true)&&(soundalarm==true)){ // Matikan penghitung dan ambil tindakan untuk memulai kembali suara jika layar tidak disentuh if (act ==0) { // Matikan alarm dengan mengaktifkan D8, rekaman suara dipicu oleh transisi LOW ke HIGH digitalWrite(8,HIGH); // Setel tinggi digitalWrite(8,LOW); // Setel UpdateDisp () rendah; // perbarui nilai ke jam } tindakan =tindakan +1; if (act ==actr) { // Matikan alarm dengan mengaktifkan D8, rekaman suara dipicu oleh transisi LOW ke HIGH digitalWrite(8,HIGH); // Setel tinggi digitalWrite(8,LOW); // Tetapkan tindakan rendah =0; // Setel ulang penghitung hopfully setiap 20 detik } }// Periksa apakah input pengguna ke layar sentuh // UserT menyetel arah 0 =kanan, 1 =bawah, 2 =kiri, 3 =atas, 4 =tidak ada input sentuh myTouch.read(); if (myTouch.dataAvailable() &&!screenPressed) { xT =myTouch.getX(); yT =myTouch.getY(); // ********************************** // ******* Masuk ke Mode Pengaturan ** ******* // ********************************** jika (((xT>=120) &&(xT<=200) &&(yT>=105) &&(yT<=140)) &&(soundalarm !=true)) { // Panggilan Pengaturan Rutin jika alarm tidak berbunyi xsetup =true; // Beralih flag clocksetup(); // Panggilan Pengaturan Jam Rutin UpdateDisp(); // perbarui nilai ke jam } else // Jika bagian tengah layar disentuh saat alarm berbunyi, matikan suara dan setel ulang alarm agar tidak disetel if (((xT>=120) &&(xT<=200) &&(yT> =105) &&(yT<=140)) &&((alarmstatus ==true) &&(soundalarm ==true))) { alarmstatus =false; alarm suara =salah; digitalWrite(8,RENDAH); // Setel rendah } screenPressed =true; } // Tidak mengizinkan menahan layar / Anda harus mengetuknya lagi jika ( !myTouch.dataAvailable() &&screenPressed){ ​​screenPressed =false; }drawghost(ghostX, ghostY, ghostD, p); // Menaikkan posisi dan Menggambar gambar// Ghost Arah //// arah d ==0 =kanan, 1 =bawah, 2 =kiri, 3 =upif(ghostD ==0){ // Kanan // Increment Counter dan tes hasil ghostX =ghostX + 3; if (ghostX ==270){ myGLCD.fillRect(ghostX-3, ghostY, ghostX, ghostY+28); // Hapus jejak grafik sebelum mengubah posisi ghostD =1; // Ubah arah ke bawah } } else if(ghostD ==1) { // Turun // Increment Counter dan hasil tes ghostY =ghostY + 3; if (ghostY ==185){ myGLCD.fillRect(ghostX+3, ghostY-3, ghostX+36, ghostY); // Hapus jejak grafik sebelum mengubah posisi ghostD =2; // Ubah arah ke bawah } } else if(ghostD ==2) { // Kiri // Increment Counter dan hasil tes ghostX =ghostX - 3; if (ghostX ==12){ myGLCD.fillRect(ghostX+28, ghostY, ghostX+31, ghostY+28); // Hapus jejak grafik sebelum mencetak positi baru ghostD =3; // Ubah arah ke bawah } } else if(ghostD ==3) { // Naik // Increment Counter dan hasil tes ghostY =ghostY - 3; if (ghostY ==14){ myGLCD.fillRect(ghostX, ghostY+29, ghostX+28, ghostY+28); // Hapus jejak grafik sebelum mencetak posisi baru ghostD =0; // Ubah arah ke bawah }}drawMonkey(MonkeyX, MonkeyY, MonkeyD, p); // Naikkan posisi dan Gambar gambar// Arah Monyet //// arah d ==0 =kanan, 1 =bawah, 2 =kiri, 3 =atas(MonkeyD ==0){ // Kanan // Penghitung Kenaikan dan uji hasil MonkeyX =MonkeyX + 3; if (MonkeyX ==270){ myGLCD.fillRect(MonkeyX-3, MonkeyY, MonkeyX, MonkeyY+40); // Hapus jejak grafik sebelum mengubah arah MonkeyD =1; // Ubah arah ke bawah } } else if(MonkeyD ==1) { // Turun // Increment Counter dan hasil tes MonkeyY =MonkeyY + 3; if (MonkeyY ==185){ myGLCD.fillRect(MonkeyX+3, MonkeyY-3, MonkeyX+38, MonkeyY); // Hapus jejak grafik sebelum mencetak posisi baru MonkeyD =2; // Ubah arah ke bawah } } else if(MonkeyD ==2) { // Kiri // Penghitung Kenaikan dan hasil tes MonkeyX =MonkeyX - 3; if (MonkeyX ==12){ myGLCD.fillRect(MonkeyX+41, MonkeyY+1, MonkeyX+40, MonkeyY+38); // Hapus jejak grafik sebelum mencetak posisi baru MonkeyD =3; // Ubah arah ke bawah } } else if(MonkeyD ==3) { // Naik // Increment Counter dan hasil tes MonkeyY =MonkeyY - 3; if (MonkeyY ==14){ myGLCD.fillRect(MonkeyX, MonkeyY+38, MonkeyX+40, MonkeyY+43); // Hapus jejak grafik sebelum mencetak posisi baru MonkeyD =0; // Ubah arah ke bawah }}drawCannon(CannonX, CannonY, CannonD, p); // Naikkan posisi dan Gambar gambar// Arah Meriam //// arah d ==0 =kanan, 1 =bawah, 2 =kiri, 3 =atas(CannonD ==0){ // Kanan // Penghitung Kenaikan dan uji hasil CannonX =CannonX + 3; if (CannonX ==270){ myGLCD.fillRect(CannonX-3, CannonY+3, CannonX, CannonY+36); // Hapus jejak grafik sebelum mengubah arah CannonD =1; // Ubah arah ke bawah } } else if(CannonD ==1) { // Turun // Increment Counter dan hasil tes CannonY =CannonY + 3; if (CannonY ==185){ CannonD =2; // Ubah arah ke bawah } } else if(CannonD ==2) { // Kiri // Penghitung Kenaikan dan hasil pengujian CannonX =CannonX - 3; if (CannonX ==12){ myGLCD.fillRect(CannonX+41, CannonY+3, CannonX+40, CannonY+36); // Hapus jejak grafik sebelum mencetak posisi baru CannonD =3; // Ubah arah ke bawah } } else if(CannonD ==3) { // Up // Increment Counter dan hasil tes CannonY =CannonY - 3; if (Meriam ==14){ MeriamD =0; // Ubah arah ke bawah }}drawpacman(pacmanX, pacmanY, pacmanD, p); // Menaikkan posisi dan Menggambar gambar// Arah pacman //// arah d ==0 =kanan, 1 =bawah, 2 =kiri, 3 =atas(pacmanD ==0){ // Kanan // Penghitung Kenaikan dan pengujian hasil pacmanX =pacmanX + 3; if (pacmanX ==270){ myGLCD.fillRect(pacmanX-3, pacmanY+3, pacmanX, pacmanY+36); // Hapus jejak grafik sebelum mengubah arah pacmanD =1; // Ubah arah ke bawah } } else if(pacmanD ==1) { // Turun // Increment Counter dan hasil tes pacmanY =pacmanY + 3; if (pacmanY ==185){ myGLCD.fillRect(pacmanX+3, pacmanY-3, pacmanX+36, pacmanY); // Hapus jejak grafik sebelum mengubah posisi pacmanD =2; // Ubah arah ke bawah } } else if(pacmanD ==2) { // Kiri // Penghitung Kenaikan dan hasil pengujian pacmanX =pacmanX - 3; if (pacmanX ==12){ myGLCD.fillRect(pacmanX+28, pacmanY, pacmanX+31, pacmanY+28); // Hapus jejak grafik sebelum mencetak positi pacmanD baru =3; // Ubah arah ke bawah } } else if(pacmanD ==3) { // Up // Increment Counter dan hasil pengujian pacmanY =pacmanY - 3; if (pacmanY ==14){ myGLCD.fillRect(pacmanX, pacmanY+29, pacmanX+28, pacmanY+28); // Hapus jejak grafik sebelum mencetak posisi baru pacmanD =0; // Ubah arah ke bawah }}drawAlien(AlienX, AlienY, AlienD, p); // Naikkan posisi dan Gambar gambar// Arah Alien //// arah d ==0 =kanan, 1 =bawah, 2 =kiri, 3 =atas(AlienD ==0){ // Kanan // Penghitung Kenaikan dan uji hasil AlienX =AlienX + 3; if (AlienX ==270){ myGLCD.fillRect(AlienX-3, AlienY+3, AlienX, AlienY+36); // Hapus jejak grafik sebelum mengubah arah AlienD =1; // Ubah arah ke bawah } } else if(AlienD ==1) { // Turun // Increment Counter dan hasil tes AlienY =AlienY + 3; if (AlienY ==185){ AlienD =2; // Ubah arah ke bawah } } else if(AlienD ==2) { // Kiri // Penghitung Kenaikan dan hasil tes AlienX =AlienX - 3; if (AlienX ==12){ myGLCD.fillRect(AlienX+41, AlienY+3, AlienX+40, AlienY+36); // Hapus jejak grafik sebelum mencetak posisi baru AlienD =3; // Ubah arah ke bawah } } else if(AlienD ==3) { // Naik // Increment Counter dan hasil tes AlienY =AlienY - 3; if (AlienY ==14){ AlienD =0; // Ubah arah ke bawah }}drawMario(MarioX, MarioY, MarioD, p); // Naikkan posisi dan Gambar gambar// Arah Mario //// arah d ==0 =kanan, 1 =bawah, 2 =kiri, 3 =atas(MarioD ==0){ // Kanan // Penghitung Kenaikan dan uji hasil MarioX =MarioX + 3; if (MarioX ==270){ myGLCD.fillRect(MarioX-3, MarioY+3, MarioX, MarioY+36); // Hapus jejak grafik sebelum mengubah arah MarioD =1; // Ubah arah ke bawah } } else if(MarioD ==1) { // Turun // Increment Counter dan hasil tes MarioY =MarioY + 3; if (MarioY ==185){ myGLCD.fillRect(MarioX+3, MarioY-3, MarioX+36, MarioY); // Hapus jejak grafik sebelum mencetak posisi baru MarioD =2; // Ubah arah ke bawah } } else if(MarioD ==2) { // Kiri // Penghitung Kenaikan dan hasil tes MarioX =MarioX - 3; if (MarioX ==12){ MarioD =3; // Ubah arah ke bawah } } else if(MarioD ==3) { // Naik // Increment Counter dan hasil tes MarioY =MarioY - 3; if (MarioY ==14){ myGLCD.fillRect(MarioX, MarioY+30, MarioX+28, MarioY+28); // Hapus jejak grafik sebelum mencetak posisi baru MarioD =0; // Ubah arah ke bawah }}delay(dly); }// *********************************************** ************************************************** ***********// =====Perbarui Jam Digital// *************************** ************************************************** ******************************* void UpdateDisp(){ // Hapus area waktu myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0);// myGLCD.fillRect(60, 80 ,262, 166); int j; // Nilai jam dalam format 24 jam int e; // Nilai menit dalam format menit int pm =0; // Tandai untuk menentukan apakah PM atau AM // Ada empat digit yang perlu digambar secara independen untuk memastikan posisi waktu yang konsisten dalam d1; // Angka puluhan jam int d2; // Satuan jam digit int d3; // Angka puluhan menit int d4; // Satuan menit digit h =jam(); // Nilai jam RT 24 jam e =menit();/* TEST =12;e =8;*/// Hitung nilai digit jam untuk waktuif ((h>=10) &&(h <=12)) { / / AM jam 10,11,12 d1 =1; // hitung angka Puluhan jam d2 =h - 10; // hitung angka Satuan jam 0,1,2 } else if ( (h>=22) &&(h <=24)) { // PM jam 10,11,12 d1 =1; // hitung angka Puluhan jam d2 =h - 22; // calculate Ones hour digit 0,1,2 } else if ((h <=9)&&(h>=1)) { // AM hours below ten d1 =0; // calculate Tens hour digit d2 =h; // calculate Ones hour digit 0,1,2 } else if ( (h>=13) &&(h <=21)) { // PM hours below 10 d1 =0; // calculate Tens hour digit d2 =h - 12; // calculate Ones hour digit 0,1,2 } else { // If hour is 0 d1 =1; // calculate Tens hour digit d2 =2; // calculate Ones hour digit 0,1,2 } // Calculate minute digit values for timeif ((e>=10)) { d3 =e/10; // calculate Tens minute digit 1,2,3,4,5 d4 =e - (d3*10); // calculate Ones minute digit 0,1,2 } else { // e is less than 10 d3 =0; d4 =e; } if (h>=12){ // Set // h =h-12; // Work out value pm =1; // Set PM flag} // *************************************************************************// Print each digit if it has changed to reduce screen impact/flicker// Set digit font colour to white myGLCD.setColor(255, 255, 255); myGLCD.setBackColor(0, 0, 0); myGLCD.setFont(SevenSeg_XXXL_Num); // First Digitif(((d1 !=c1)||(xsetup ==true))&&(d1 !=0)){ // Do not print zero in first digit position myGLCD.printNumI(d1,10,70); // Printing thisnumber impacts LFH walls so redraw impacted area // ---------------- Clear lines on Outside wall myGLCD.setColor(0,0,0); myGLCD.drawRoundRect(1, 238, 318, 1); }//If prevous time 12:59 or 00:59 and change in time then blank First Digitif((c1 ==1) &&(c2 ==2) &&(c3 ==5) &&(c4 ==9) &&(d2 !=c2) ){ // Clear the previouis First Digit and redraw wall myGLCD.setColor(0,0,0); myGLCD.fillRect(50, 70, 70, 165);}if((c1 ==0) &&(c2 ==0) &&(c3 ==5) &&(c4 ==9) &&(d2 !=c2) ){ // Clear the previouis First Digit and redraw wall myGLCD.setColor(0,0,0); myGLCD.fillRect(50, 70, 70, 165);} myGLCD.setColor(255, 255, 255); myGLCD.setBackColor(0, 0, 0); myGLCD.setFont(SevenSeg_XXXL_Num); // Second Digitif((d2 !=c2)||(xsetup ==true)){ myGLCD.printNumI(d2,70,70); // Print 0}// Third Digitif((d3 !=c3)||(xsetup ==true)){ myGLCD.printNumI(d3,143,70); // Was 145 }// Fourth Digitif((d4 !=c4)||(xsetup ==true)){ myGLCD.printNumI(d4,204,70); // Was 205 }if (xsetup ==true){ xsetup =false; // Reset Flag now leaving setup mode } // Print PM or AM // myGLCD.setColor(1, 73, 240); myGLCD.setBackColor(0, 0, 0); myGLCD.setFont(BigFont); if (pm ==0) { myGLCD.print("AM", 270, 147); } else { myGLCD.print("PM", 270, 147); }// ----------- Alarm Set on LHS lower pillarif (alarmstatus ==true) { // Print AS on fron screenleft hand side myGLCD.print("AS", 7, 147); } // Round dots myGLCD.setColor(255, 255, 255); myGLCD.setBackColor(0, 0, 0); myGLCD.fillCircle(137, 105, 5); myGLCD.fillCircle(137, 135, 5);//--------------------- copy exising time digits to global variables so that these can be used to test which digits change in futurec1 =d1;c2 =d2;c3 =d3;c4 =d4;}// =====initiateGame - Custom Functionvoid drawscreen() { // Setup Clock Background //Draw Background lines myGLCD.setColor(1, 73, 240);// myGLCD.setColor(229, 14, 122);// myGLCD.setColor(255, 0, 131); // ---------------- Outside wall myGLCD.drawRoundRect(0, 239, 319, 0); myGLCD.drawRoundRect(2, 237, 317, 2); myGLCD.drawBitmap (ghostX, ghostY, 28, 28, rd_ghost); // Closed Ghost myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioR3); // Closed Ghost myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey2); // Closed Ghost myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, r_o_pacman); // Closed Ghost myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien1); // Closed Ghost myGLCD.drawBitmap (CannonX, CannonY, 40, 40, Cannon); // Closed Ghost } // ********************************** // ******* Enter Setup Mode ********* // ********************************** // Use up down arrows to change time and alrm settings void clocksetup(){ int timehour =hour();int timeminute =minute();// Read Alarm Set Time from Eeprom // read a byte from the current address of the EEPROM ahour =EEPROM.read(100); alarmhour =(int)ahour; if (alarmhour>24 ) { alarmhour =0; } amin =EEPROM.read(101); alarmminute =(int)amin; if (alarmminute>60 ) { alarmminute =0; }boolean savetimealarm =false; // If save button pushed save the time and alarm // Setup Screen myGLCD.clrScr();// ---------------- Outside wall myGLCD.setColor(255, 255, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.drawRoundRect(0, 239, 319, 0); myGLCD.drawRoundRect(2, 237, 317, 2); //Reset screenpressed flagscreenPressed =false;// Read in current clock time and Alarm time // Setup buttons myGLCD.setFont(BigFont); // Time Set buttons myGLCD.print("+ +", 135, 38); myGLCD.print("- -", 135, 82); myGLCD.drawRoundRect(132, 35, 152, 55); // time hour + myGLCD.drawRoundRect(180, 35, 200, 55); // time minute + myGLCD.drawRoundRect(132, 80, 152, 100); // time hour - myGLCD.drawRoundRect(180, 80, 200, 100); // time minute - // Alarm Set buttons myGLCD.print("+ +", 135, 138); myGLCD.print("- -", 135, 182); myGLCD.drawRoundRect(132, 135, 152, 155); // alarm hour + myGLCD.drawRoundRect(180, 135, 200, 155); // alarm minute + myGLCD.drawRoundRect(132, 180, 152, 200); // alarm hour - myGLCD.drawRoundRect(180, 180, 200, 200); // alarm minute - myGLCD.print("SAVE", 13, 213); myGLCD.print("EXIT", 245, 213); myGLCD.drawRoundRect(10, 210, 80, 230); myGLCD.drawRoundRect(243, 210, 310, 230); // Get your Ghost on myGLCD.drawBitmap (50, 20, 28, 28, rd_ghost); // Closed Ghost myGLCD.drawBitmap (240, 100, 28, 28, r_o_pacman); // Closed Ghost myGLCD.drawBitmap (240, 20, 40, 40, Alien1); // Closed Ghost // Begin Loop herewhile (xsetup ==true){ if (alarmstatus ==true){ // flag where false is off and true is on myGLCD.print("SET", 220, 160); } else { myGLCD.print("OFF", 220, 160); } myGLCD.drawRoundRect(218, 157, 268, 177);// Draw Sound Button myGLCD.print("TEST", 50, 110); // Triggers alarm sound myGLCD.drawRoundRect(48, 108, 116, 128); // Display Current Time myGLCD.print("Time", 40, 60); // myGLCD.printNumI(timehour, 130, 60); if(timehour>=10){ // Annoyingly if number less than 10 doesnt print on RHS and misses zero so need to compensate myGLCD.printNumI(timehour, 130, 60); // If>=10 just print minute } else { myGLCD.print("0", 130, 60); myGLCD.printNumI(timehour, 146, 60); } myGLCD.print(":", 160, 60); if(timeminute>=10){ // Annoyingly if number less than 10 doesnt print on RHS and misses zero so need to compensate myGLCD.printNumI(timeminute, 175, 60); // If>=10 just print minute } else { myGLCD.print("0", 175, 60); myGLCD.printNumI(timeminute, 193, 60); } //Display Current Alarm Setting myGLCD.print("Alarm", 40, 160); // myGLCD.printNumI(alarmhour, 130, 160); if(alarmhour>=10){ // Annoyingly if number less than 10 doesnt print on RHS and misses zero so need to compensate myGLCD.printNumI(alarmhour, 130, 160); // If>=10 just print minute } else { myGLCD.print("0", 130, 160); myGLCD.printNumI(alarmhour, 146, 160); } myGLCD.print(":", 160, 160); if(alarmminute>=10){ // Annoyingly if number less than 10 doesnt print on RHS and misses zero so need to compensate myGLCD.printNumI(alarmminute, 175, 160); // If>=10 just print minute } else { myGLCD.print("0", 175, 160); myGLCD.printNumI(alarmminute, 193, 160); } // Read input to determine if buttons pressed myTouch.read(); if (myTouch.dataAvailable()) { xT =myTouch.getX(); yT =myTouch.getY(); // Capture input command from user if ((xT>=230) &&(xT<=319) &&(yT>=200) &&(yT<=239)) { // (243, 210, 310, 230) Exit Button xsetup =false; // Exit setupmode } else if ((xT>=0) &&(xT<=90) &&(yT>=200) &&(yT<=239)) { // (243, 210, 310, 230) Save Alarm and Time Button savetimealarm =true; // Exit and save time and alarm xsetup =false; // Exit setupmode } else if ((xT>=130) &&(xT<=154) &&(yT>=32) &&(yT<=57)) { // Time Hour + (132, 35, 152, 55) timehour =timehour + 1; // Increment Hour if (timehour ==24) { // reset hour to 0 hours if 24 timehour =0; } } else if ((xT>=130) &&(xT<=154) &&(yT>=78) &&(yT<=102)) { // (132, 80, 152, 100); // time hour - timehour =timehour - 1; // Increment Hour if (timehour ==-1) { // reset hour to 23 hours if <0 timehour =23; } } else if ((xT>=178) &&(xT<=202) &&(yT>=32) &&(yT<=57)) { // Time Minute + (180, 35, 200, 55) timeminute =timeminute + 1; // Increment Hour if (timeminute ==60) { // reset minute to 0 minutes if 60 timeminute =0; } } else if ((xT>=178) &&(xT<=202) &&(yT>=78) &&(yT<=102)) { // (180, 80, 200, 100); // time minute - timeminute =timeminute - 1; // Increment Hour if (timeminute ==-1) { // reset minute to 0 minutes if 60 timeminute =59; } } else if ((xT>=130) &&(xT<=154) &&(yT>=133) &&(yT<=157)) { // (132, 135, 152, 155); // alarm hour + alarmhour =alarmhour + 1; // Increment Hour if (alarmhour ==24) { // reset hour to 0 hours if 24 alarmhour =0; } } else if ((xT>=130) &&(xT<=154) &&(yT>=178) &&(yT<=202)) { // (132, 180, 152, 200); // alarm hour - alarmhour =alarmhour - 1; // Increment Hour if (alarmhour ==-1) { // reset hour to 23 hours if <0 alarmhour =23; } } else if ((xT>=178) &&(xT<=202) &&(yT>=133) &&(yT<=157)) { // (180, 135, 200, 155); // alarm minute + alarmminute =alarmminute + 1; // Increment Hour if (alarmminute ==60) { // reset minute to 0 minutes if 60 alarmminute =0; } } else if ((xT>=178) &&(xT<=202) &&(yT>=178) &&(yT<=202)) { // (180, 180, 200, 200); // alarm minute - alarmminute =alarmminute - 1; // Increment Hour if (alarmminute ==-1) { // reset minute to 0 minutes if 60 alarmminute =59; } } else if ((xT>=216) &&(xT<=270) &&(yT>=155) &&(yT<=179)) { // (218, 157, 268, 177); // alarm set button pushed if (alarmstatus ==true) { alarmstatus =false; // Turn off Alarm } else { alarmstatus =true; // Turn on Alarm } } else if ((xT>=46) &&(xT<=118) &&(yT>=106) &&(yT<=130)) { // ((48, 108, 116, 128); // alarm test button pushed // Set off alarm by toggling D8, recorded sound triggered by LOW to HIGH transition digitalWrite(8,HIGH); // Set high digitalWrite(8,LOW); // Set low } // Should mean changes should scroll if held down delay(250); } } if ( savetimealarm ==true) { // The following codes transmits the data to the RTC Wire.beginTransmission(DS1307); Wire.write(byte(0)); Wire.write(decToBcd(0)); Wire.write(decToBcd(timeminute)); Wire.write(decToBcd(timehour)); Wire.write(decToBcd(0)); Wire.write(decToBcd(0)); Wire.write(decToBcd(0)); Wire.write(decToBcd(0)); Wire.write(byte(0)); Wire.endTransmission(); // Ends transmission of data // Write the Alarm Time to EEPROM so it can be stored when powered off //alarmhour =(int)ahour; ahour =(byte)alarmhour; amin =(byte)alarmminute; EEPROM.write(100, ahour); EEPROM.write(101, amin); // Now time and alarm data saved reset fla g savetimealarm =false;} //* Clear Screen myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0); myGLCD.fillRect(0,239,319,0); xsetup =true; // Set Flag now leaving setup mode in order to draw Clock Digits setSyncProvider(RTC.get); // the function to get the time from the RTC setSyncInterval(60); // sync the time every 60 seconds (1 minutes) drawscreen(); // Initiate the screen UpdateDisp(); // update value to clock } // =================Decimal to BCD converterbyte decToBcd(byte val) { return ((val/10*16) + (val%10));} /* myGLCD.drawBitmap (ghostX, ghostY, 28, 28, ghost); // Closed Ghost myGLCD.drawBitmap (MarioX, MarioY, 40, 40, Mario); // Closed Ghost myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey); // Closed Ghost myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, r_o_pacman); // Closed Ghost myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien); // Closed Ghost myGLCD.drawBitmap (CannonX, CannonY, 40, 40, Cannon); // Closed Ghost *///**********************************************************************************************************//======Draws the rd_ghost - bitmapvoid drawghost(int x, int y, int d, int p) { // Draws the ghost - bitmap // knotting direction d ==0 =right, 1 =down, 2 =left, 3 =up myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0); if ( d ==0){ // Right myGLCD.fillRect(x-3, y, x, y+28); // Clear trail off graphic before printing new position // draw image myGLCD.drawBitmap (ghostX, ghostY, 28, 28, rr_ghost); } else if ( d ==1){ // Down myGLCD.fillRect(x+3, y-3, x+36, y); // Clear trail off graphic before printing new position // draw image myGLCD.drawBitmap (ghostX, ghostY, 28, 28, rd_ghost); } else if ( d ==2){ // Left myGLCD.fillRect(x+28, y, x+31, y+28); // Clear trail off graphic before printing new positi // draw image myGLCD.drawBitmap (ghostX, ghostY, 28, 28, rl_ghost); // draw image } else if ( d ==3){ // Up myGLCD.fillRect(x, y+29, x+28, y+28); // Clear trail off graphic before printing new position // draw image myGLCD.drawBitmap (ghostX, ghostY, 28, 28, ru_ghost); }}//**********************************************************************************************************//======Draws the Mario - bitmapvoid drawMario(int x, int y, int d, int p) { // Draws the Mario - bitmap // Mario direction d ==0 =right, 1 =down, 2 =left, 3 =up myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0); if ( d ==0){ // Right myGLCD.fillRect(x-3, y+3, x, y+36); // Clear trail off graphic before printing new position // draw image if (p==0) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioR1); } else if (p==1) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioR3); } else if (p==2) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioR2); } else if (p==3) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioR3); } } else if ( d ==1){ // Down myGLCD.fillRect(x+3, y-3, x+36, y); // Clear trail off graphic before printing new position // draw image if (p==0) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU1); } else if (p==1) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU2); } else if (p==2) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU1); } else if (p==3) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU2); } } else if ( d ==2){ // Left myGLCD.fillRect(x+28, y, x+31, y+28); // Clear trail off graphic before printing new positi // draw image if (p==0) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioL1); } else if (p==1) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioL3); } else if (p==2) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioL2); } else if (p==3) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioL3); } } else if ( d ==3){ // Up myGLCD.fillRect(x, y+30, x+28, y+28); // Clear trail off graphic before printing new position // draw image if (p==0) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU1); } else if (p==1) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU2); } else if (p==2) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU1); } else if (p==3) { myGLCD.drawBitmap (MarioX, MarioY, 28, 28, MarioU2); } }// myGLCD.drawBitmap (MarioX, MarioY, 40, 40, MarioR3); }//**********************************************************************************************************//======Draws the Cannon - bitmapvoid drawCannon(int x, int y, int d, int p) { // Draws the Cannon - bitmap // Cannon direction d ==0 =right, 1 =down, 2 =left, 3 =up myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0); if ( d ==0){ // Right myGLCD.fillRect(x-3, y+3, x, y+36); // Clear trail off graphic before printing new position // draw image } else if ( d ==1){ // Down myGLCD.fillRect(x+3, y-3, x+36, y); // Clear trail off graphic before printing new position // draw image } else if ( d ==2){ // Left myGLCD.fillRect(x+41, y+3, x+40, y+36); // Clear trail off graphic before printing new positi // draw image } else if ( d ==3){ // Up myGLCD.fillRect(x, y+41, x+40, y+40); // Clear trail off graphic before printing new position // draw image } myGLCD.drawBitmap (CannonX, CannonY, 40, 40, Cannon); }//**********************************************************************************************************//======Draws the Monkey - bitmapvoid drawMonkey(int x, int y, int d, int p) { // Draws the Monkey - bitmap // Monkey direction d ==0 =right, 1 =down, 2 =left, 3 =up myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0); if ( d ==0){ // Right myGLCD.fillRect(x-3, y, x, y+40); // Clear trail off graphic before printing new position // draw image if (p==0) { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey2); } else if (p==1) { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey2); } else if (p==2) { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey3); }else { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey3); } } else if ( d ==1){ // Down myGLCD.fillRect(x, y-3, x+40, y); // Clear trail off graphic before printing new position // draw image myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey3); } else if ( d ==2){ // Left myGLCD.fillRect(x+41, y, x+40, y+40); // Clear trail off graphic before printing new positi // draw image if (p==0) { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey2); } else if (p==1) { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey2); } else if (p==2) { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey3); }else { myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey3); } } else if ( d ==3){ // Up myGLCD.fillRect(x, y+43, x+40, y+40); // Clear trail off graphic before printing new position // draw image myGLCD.drawBitmap (MonkeyX, MonkeyY, 40, 40, Monkey3); } }//**********************************************************************************************************//======Draws the pacman - bitmapvoid drawpacman(int x, int y, int d, int p) { // Draws the pacman - bitmap // pacman direction d ==0 =right, 1 =down, 2 =left, 3 =up myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0); if ( d ==0){ // Right myGLCD.fillRect(x-3, y+3, x, y+36); // Clear trail off graphic before printing new position // draw image if (p==0) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, c_pacman); } else if (p==1) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, r_m_pacman); } else if (p==2) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, r_o_pacman); }else { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, r_m_pacman); } } else if ( d ==1){ // Down myGLCD.fillRect(x+3, y-3, x+36, y); // Clear trail off graphic before printing new position // draw image if (p==0) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, c_pacman); } else if (p==1) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, d_m_pacman); } else if (p==2) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, d_o_pacman); }else { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, d_m_pacman); } } else if ( d ==2){ // Left myGLCD.fillRect(x+28, y, x+31, y+28); // Clear trail off graphic before printing new positi // draw image if (p==0) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, c_pacman); } else if (p==1) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, l_m_pacman); } else if (p==2) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, l_o_pacman); }else { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, l_m_pacman); } } else if ( d ==3){ // Up myGLCD.fillRect(x, y+29, x+28, y+28); // Clear trail off graphic before printing new position // draw image if (p==0) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, c_pacman); } else if (p==1) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, u_m_pacman); } else if (p==2) { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, u_o_pacman); }else { myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, u_m_pacman); } }// myGLCD.drawBitmap (pacmanX, pacmanY, 28, 28, r_o_pacman); }//**********************************************************************************************************//======Draws the Alien - bitmapvoid drawAlien(int x, int y, int d, int p) { // Draws the Alien - bitmap // Alien direction d ==0 =right, 1 =down, 2 =left, 3 =up myGLCD.setColor(0, 0, 0); myGLCD.setBackColor(0, 0, 0); if ( d ==0){ // Right myGLCD.fillRect(x-3, y+3, x, y+36); // Clear trail off graphic before printing new position // draw image if((p ==1)||(p ==3)){ myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien1); } else { myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien2); } } else if ( d ==1){ // Down myGLCD.fillRect(x+3, y-3, x+36, y); // Clear trail off graphic before printing new position // draw image if((p ==1)||(p ==3)){ myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien1); } else { myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien2); } } else if ( d ==2){ // Left myGLCD.fillRect(x+41, y+3, x+40, y+36); // Clear trail off graphic before printing new positi // draw image if((p ==1)||(p ==3)){ myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien1); } else { myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien2); } } else if ( d ==3){ // Up myGLCD.fillRect(x, y+41, x+40, y+40); // Clear trail off graphic before printing new position // draw image if((p ==1)||(p ==3)){ myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien1); } else { myGLCD.drawBitmap (AlienX, AlienY, 40, 40, Alien2); } } }

Suku cadang dan penutup khusus

Thingiverse
https://www.thingiverse.com/thing:3017701CAD file on thingiverse.com

Skema


Proses manufaktur

  1. Pengurutan LED
  2. Jam Kuku
  3. Arduino pov vision clock
  4. Generator Jam Verilog
  5. Jam Kata Sederhana (Arduino)
  6. Konsol Game Genggam TeleBall Retro
  7. Jam Master
  8. Konsol Game Retro Ingegno
  9. Jam Kata Italia
  10. Jam cermin tak terbatas