Minggu, 03 Maret 2024

Laporan Akhir Modul 1 Percobaan 3

Modul 1

General Input dan Output

Percobaan 3


 

  • Buatlah rangkaian sesuai dengan kondisi yang telah dipilih
  • Buat Program pada software Arduino IDE
  • Masukkan program yang telah dibuat pada software Arduino IDE sebagai library Arduino
  • Jalankan rangkaian, sesuai dengan kondisi yang diinginkan



  • Hardware



  • Diagram Blok



a. Rangkaian Simulasi

Gambar Rangkaian Sebelum Disimulasikan


Gambar Rangkaian Disimulasikan




b. Prinsip Kerja

Pada percobaan 3 kondisi 5, kita menggunakan Dip Switch sebagai input dimana kaki 1 dan 2 Dip Switch terhubung dengan kaki 12 dan 13 arduino dan kaki 3-8 Dip Switch terhubung dengan kaki A0-A5 arduino dan Dot Matrix 8x8 sebagai output dari data yang dikirimkan dari arduino. Kemudain untuk kaki 9-16 Dip Switch itu terhubung dengan ground karena kita akan menggunakan dipswitch yang bersifat pull up yang mana dip switch telah aktif sebelum masuk dalam keadaan ON

Untuk menampilkan outputnya pada Dot matrix kita menggunakan driver IC MAX7219 untuk mengontrol display Dot Matrix 8x8. Dimana kaki ISET dan DOUT terhubung ke VCC dan GND pada Arduino dan tiga pin lainnya, DIN, CLK, dan LOAD terhububung ke pin digital Arduino.

Pada percobaan ini, Suatu kondisi ketika ada 2 switch mana saja yang aktif maka Dot matrix akan aktif, dan akan menampilkan angka 1,2,3 pada Dot Matrix secara bergantian. 

Untuk kondisi awal pada program kita atur dulu agar semua pin mati dan dot matrix tidak menyala, dengan program berikut 

   byte patterns[8] = {0, 0, 0, 0, 0, 0, 0, 0}; // Pola LED untuk ditampilkan

Kemudian pada codingan kita masukan kode untuk menampilkan angka 1,2,3 dengan menggunakan code dibawah

byte pattern1[] = { B01000000,B11000000,B01000000,B01000000,B01000000,B01000000,B11100000,}; // Pola LED untuk angka 1
        byte pattern2[] = { B01110000,B10001000,B00001000,B00010000,B00100000,B01000000,B11111000, }; // Pola LED untuk angka 2
        byte pattern3[] = { B11111000,B00010000,B00100000,B00010000,B00001000,B10001000,B01110000 }; // Pola LED untuk angka 3

a. Flowchart





b. Listing Program

#include <LedControl.h> //Library untuk LED Dot Matrix

const int DIP_Pins[] = {13, 12, A0, A1, A2, A3, A4, A5}; // Pin DIP switch terhubung ke Arduino
LedControl lc=LedControl(2,3,4,1); // Pin DIN, CLK, LOAD (CS), dan jumlah Dot Matrix yang dihubungkan ke Arduino
byte patterns[8] = {0, 0, 0, 0, 0, 0, 0, 0}; // Pola LED untuk ditampilkan

void setup() {
    for (int i = 0; i < 8; i++) {
        pinMode(DIP_Pins[i], INPUT_PULLUP); // Mengatur pin DIP switch sebagai input dengan pull-up resistor
    }

    lc.shutdown(0,false); // Mengaktifkan display
    lc.setIntensity(0,8); // Mengatur kecerahan LED (nilai antara 0 dan 15)
    lc.clearDisplay(0); // Membersihkan tampilan dot matrix
}

void loop() {
    // Membaca status DIP switch dan mengupdate pola LED
    int activeSwitches = 0; // Jumlah saklar yang aktif
    for (int i = 0; i < 8; i++) {
        if (digitalRead(DIP_Pins[i]) == LOW) {
            activeSwitches++; // Menghitung jumlah saklar yang aktif
        }
    }

    // Menampilkan angka 2, k, dan 3 secara berurutan jika 2 saklar aktif
    if (activeSwitches == 2) {
        byte pattern1[] = { B01000000,B11000000,B01000000,B01000000,B01000000,B01000000,B11100000,}; // Pola LED untuk angka 1
        byte pattern2[] = { B01110000,B10001000,B00001000,B00010000,B00100000,B01000000,B11111000, }; // Pola LED untuk angka 2
        byte pattern3[] = { B11111000,B00010000,B00100000,B00010000,B00001000,B10001000,B01110000 }; // Pola LED untuk angka 3
       
        // Menampilkan angka 1
for (int i = 0; i < 8; i++) {
    lc.setRow(0, i, pattern1[i]);
    delay(1000); // Delay untuk efek tampilan
}
// Menampilkan angka 2
for (int i = 0; i < 8; i++) {
    lc.setRow(0, i, pattern2[i]);
    delay(1000); // Delay untuk efek tampilan
}
// Menampilkan angka 3
for (int i = 0; i < 8; i++) {
    lc.setRow(0, i, pattern3[i]);
    delay(1000); // Delay untuk efek tampilan
}
    } else {
        // Menampilkan pola LED sesuai dengan status saklar DIP seperti sebelumnya
        for (int i = 0; i < 8; i++) {
            if (digitalRead(DIP_Pins[i]) == LOW) {
                patterns[i] = B11111111; // Mengatur semua LED menyala jika sakelar diaktifkan
            } else {
                patterns[i] = 0; // Mengatur semua LED mati jika sakelar tidak diaktifkan             }         }

        // Menampilkan pola LED pada dot matrix
        for (int row = 0; row < 8; row++) {
            lc.setRow(0, row, patterns[row]);
        }     }     delay(100); // Delay untuk tampilan LED stabil
}


Penjelasan :


#include <LedControl.h> //Library untuk LED Dot Matrix

const int DIP_Pins[] = {13, 12, A0, A1, A2, A3, A4, A5}; // Pin DIP switch terhubung ke Arduino
LedControl lc=LedControl(2,3,4,1); // Pin DIN, CLK, LOAD (CS), dan jumlah Dot Matrix yang dihubungkan ke Arduino
byte patterns[8] = {0, 0, 0, 0, 0, 0, 0, 0}; // Pola LED untuk ditampilkan

Deklarasi variabel yang digunakan dalam program, yaitu:

DIP_Pins[]: array yang menyimpan pin-pin yang terhubung ke DIP switch.

lc: variabel yang mewakili instance dari kelas LedControl.

patterns[]: array yang menyimpan pola LED yang akan ditampilkan pada LED Dot Matrix.

void setup() {
    for (int i = 0; i < 8; i++) {
        pinMode(DIP_Pins[i], INPUT_PULLUP); // Mengatur pin DIP switch sebagai input dengan pull-up resistor
    }

    lc.shutdown(0,false); // Mengaktifkan display
    lc.setIntensity(0,8); // Mengatur kecerahan LED (nilai antara 0 dan 15)
    lc.clearDisplay(0); // Membersihkan tampilan dot matrix
}

Bagian ini merupakan bagian dari fungsi setup() yang dijalankan sekali saja pada awal program di-run. Di sini, beberapa konfigurasi dan aturan awal diberikan kepada perangkat.

Semua pin DIP switch diatur sebagai input dengan pull-up resistor menggunakan pernyataan pinMode(DIP_Pins[i], INPUT_PULLUP);
Display LED Dot Matrix diaktifkan menggunakan lc.shutdown(0,false);
Kecerahan LED diatur ke nilai maksimum menggunakan lc.setIntensity(0,8);
Semua LED Dot Matrix dihapus menggunakan lc.clearDisplay(0);


void loop() {
    // Membaca status DIP switch dan mengupdate pola LED
    int activeSwitches = 0; // Jumlah saklar yang aktif
    for (int i = 0; i < 8; i++) {
        if (digitalRead(DIP_Pins[i]) == LOW) {
            activeSwitches++; // Menghitung jumlah saklar yang aktif
        }
    }

    // Menampilkan angka 2, k, dan 3 secara berurutan jika 2 saklar aktif
    if (activeSwitches == 2) {
        byte pattern1[] = { B01000000,B11000000,B01000000,B01000000,B01000000,B01000000,B11100000,}; // Pola LED untuk angka 1
        byte pattern2[] = { B01110000,B10001000,B00001000,B00010000,B00100000,B01000000,B11111000, }; // Pola LED untuk angka 2
        byte pattern3[] = { B11111000,B00010000,B00100000,B00010000,B00001000,B10001000,B01110000 }; // Pola LED untuk angka 3
       
        // Menampilkan angka 1
for (int i = 0; i < 8; i++) {
    lc.setRow(0, i, pattern1[i]);
    delay(1000); // Delay untuk efek tampilan
}
// Menampilkan angka 2
for (int i = 0; i < 8; i++) {
    lc.setRow(0, i, pattern2[i]);
    delay(1000); // Delay untuk efek tampilan
}
// Menampilkan angka 3
for (int i = 0; i < 8; i++) {
    lc.setRow(0, i, pattern3[i]);
    delay(1000); // Delay untuk efek tampilan
}
    } else {
        // Menampilkan pola LED sesuai dengan status saklar DIP seperti sebelumnya
        for (int i = 0; i < 8; i++) {
            if (digitalRead(DIP_Pins[i]) == LOW) {
                patterns[i] = B11111111; // Mengatur semua LED menyala jika sakelar diaktifkan
            } else {
                patterns[i] = 0; // Mengatur semua LED mati jika sakelar tidak diaktifkan             }         }

        // Menampilkan pola LED pada dot matrix
        for (int row = 0; row < 8; row++) {
            lc.setRow(0, row, patterns[row]);
        }     }     delay(100); // Delay untuk tampilan LED stabil
}

Bagian ini merupakan bagian dari fungsi loop() yang akan diulang-ulang selama program berjalan.

activeSwitches diinisialisasi ke 0, dan kemudian diperbarui untuk menghitung jumlah saklar DIP yang aktif.
Jika dua saklar DIP aktif, program akan menampilkan angka 2, k, dan 3 secara berurutan pada LED Dot Matrix dengan menggunakan pola LED yang telah ditentukan.
Jika tidak, program akan menampilkan pola LED yang sesuai dengan status saklar DIP seperti sebelumnya.
Jika dua saklar DIP aktif, program akan menampilkan angka 2, k, dan 3 secara berurutan pada LED Dot Matrix dengan menggunakan pola LED yang telah ditentukan.

Jika tidak, program akan menampilkan pola LED yang sesuai dengan status saklar DIP seperti sebelumnya.
Selama loop berjalan, terdapat delay sebesar 100 ms setelah setiap perubahan pada tampilan LED Dot Matrix menggunakan pernyataan delay(100);



Ketika 2 switch aktif dot matrix akan menampilkan angka 1,2,3. Untuk 2 switch disini bebas yang mana saja dari 8 switch yang ada





Download HTML klik disini
Download Rangkaian Proteus klik disini
Download Program Arduino klik disini
Download Video klik disini
Download Datasheet Driver IC MAX7219 klik disini
Download Datasheet Arduino klik disini
Download Datasheet Dip Switch klik disini


Tidak ada komentar:

Posting Komentar

Entri yang Diunggulkan

Laporan Akhir Project M4

Laporan Akhir Demo Project [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Pendahuluan 2. Tujuan 3. Alat dan Bahan 4. Dasar Teori 5. Percobaan   ...