Minggu, 03 Maret 2024

Laporan Akhir Modul 1 Percobaan 2

Modul 1

General Input dan Output

Percobaan 2


 

  • 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

    
Jika program dijalankan dan masukan dari pengguna diinputkan ke Arduino, lalu program terus berjalan dalam loop utama, menunggu input dari pengguna. Jika ada input dari tombol, maka LED akan terang, dan ada dua kondisi. Sebelum kondisi ini dilakukan, maka semua LED akan dimatikan terlebih dahulu.





Sesuai dengan kondisi, tombol baris 1 kolom 1 akan menampilkan angka 1 pada display tujuh segmen. Sebelum menampilkannya, maka proteus harus dijalankan terlebih dahulu, lalu tombol harus ditekan. Inputan dari tombol akan dibaca oleh Arduino, dan Arduino akan mengatur kondisi yang dibaca melalui program. Setelah program dibaca, output akan keluar dari Arduino dan masuk ke display tujuh segmen, dimana akan ditampilkan angka 1, dimana pada tujuh segmen yang berlogika high itu adalah segmen A, B, C, dan D.
a. Flowchart



b. Listing Program
#include <Keypad.h>

const byte ROWS = 4; //jumlah baris pada keypad
const byte COLS = 4; //jumlah kolom pada keypad
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'}, // Keypad 4x4 layout
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {A4, A3, A2, A1}; //pin yang terhubung dengan baris keypad
byte colPins[COLS] = {10, 11, 12, 13}; //pin yang terhubung dengan kolom keypad

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

// Pins untuk seven segment display
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2}; // Perhatikan tanda kurung kurawal yang tidak perlu
const int numSegments = 7; // Harusnya 8 karena jumlah pin seven segment adalah 8

void setup() {
  for (int i = 0; i < numSegments; i++) {
    pinMode(segmentPins[i], OUTPUT);
    digitalWrite(segmentPins[i], LOW);
  }
}

void loop() {
  char key = keypad.getKey();
  if (key != NO_KEY) {
    displayCharacter(key);
  }
}

void displayCharacter(char key) {
  switch (key) {
    case '0':
      displaySegments(true, true, true, true, true, true, false);
      break;
    case '1':
      displaySegments(false, true, true, false, false, false, false);
      break;
    case '2':
      displaySegments(true, true, false, true, true, false, true);
      break;
    case '3':
      displaySegments(true, true, true, true, false, false, true);
      break;
    case '4':
      displaySegments(false, true, true, false, false, true, true);
      break;
    case '5':
      displaySegments(true, false, true, true, false, true, true);
      break;
    case '6':
      displaySegments(true, true, true, false, false, false, false);
      break;
    case '7':
      displaySegments(true, false, true, true, true, true, true);
      break;
    case '8':
      displaySegments(true, true, true, true, true, true, true);
      break;
    case '9':
      displaySegments(true, true, true, true, false, true, true);
      break;
    case 'A':
      displaySegments(true, true, true, false, true, true, true);
      break;
    case 'B':
      displaySegments(false, false, true, true, true, true, true);
      break;
    case 'C':
      displaySegments(true, false, false, true, true, true, false);
      break;
    case 'D':
      displaySegments(false, true, true, true, true, false, true);
      break;
    default:
      turnOffSegments();
      break;
  }
}

void displaySegments(bool a, bool b, bool c, bool d, bool e, bool f, bool g) {
  bool segments[] = {a, b, c, d, e, f, g};
  for (int i = 0; i < numSegments; i++) {
    digitalWrite(segmentPins[i], segments[i] ? HIGH : LOW);
  }
}

void turnOffSegments() {
  for (int i = 0; i < numSegments; i++) {
    digitalWrite(segmentPins[i], LOW);
  }
}

Penjelasan:

#include <Keypad.h>

const byte ROWS = 4; //jumlah baris pada keypad
const byte COLS = 4; //jumlah kolom pada keypad
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'}, // Keypad 4x4 layout
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {A4, A3, A2, A1}; //pin yang terhubung dengan baris keypad
byte colPins[COLS] = {10, 11, 12, 13}; //pin yang terhubung dengan kolom keypad

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

// Pins untuk seven segment display
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2}; // Perhatikan tanda kurung kurawal yang tidak perlu
const int numSegments = 7; // Harusnya 8 karena jumlah pin seven segment adalah 8


Program ini menggunakan library Keypad.h untuk membaca input dari keypad 4x4. Dengan menggunakan konstanta ROWS dan COLS, program menentukan jumlah baris dan kolom pada keypad. Array keys berisi karakter yang akan ditampilkan pada setiap tombol keypad.
void setup() {
  for (int i = 0; i < numSegments; i++) {
    pinMode(segmentPins[i], OUTPUT);
    digitalWrite(segmentPins[i], LOW);
  }
}
Pada bagian setup(), program mengatur pin yang terhubung dengan keypad dan seven segment display. Setelah itu, program mengatur pin-pin seven segment display sebagai output dan mengatur semua pin ke LOW.
void loop() {
  char key = keypad.getKey();
  if (key != NO_KEY) {
    displayCharacter(key);
  }
}
Pada bagian loop(), program mengambil input dari keypad dan mengecek apakah ada input dari tombol keypad. Jika ada input, program akan menampilkan angka yang sesuai dengan tombol yang ditekan melalui fungsi displayCharacter().
void displayCharacter(char key) {
  switch (key) {
    case '0':
      displaySegments(true, true, true, true, true, true, false);
      break;
    case '1':
      displaySegments(false, true, true, false, false, false, false);
      break;
    case '2':
      displaySegments(true, true, false, true, true, false, true);
      break;
    case '3':
      displaySegments(true, true, true, true, false, false, true);
      break;
    case '4':
      displaySegments(false, true, true, false, false, true, true);
      break;
    case '5':
      displaySegments(true, false, true, true, false, true, true);
      break;
    case '6':
      displaySegments(true, true, true, false, false, false, false);
      break;
    case '7':
      displaySegments(true, false, true, true, true, true, true);
      break;
    case '8':
      displaySegments(true, true, true, true, true, true, true);
      break;
    case '9':
      displaySegments(true, true, true, true, false, true, true);
      break;
    case 'A':
      displaySegments(true, true, true, false, true, true, true);
      break;
    case 'B':
      displaySegments(false, false, true, true, true, true, true);
      break;
    case 'C':
      displaySegments(true, false, false, true, true, true, false);
      break;
    case 'D':
      displaySegments(false, true, true, true, true, false, true);
      break;
    default:
      turnOffSegments();
      break;
  }
}
Fungsi displayCharacter() menggunakan switch case untuk menentukan angka yang sesuai dengan tombol yang ditekan. Setelah menentukan angka, program akan memanggil fungsi displaySegments() untuk menampilkan angka tersebut melalui seven segment display.
void displaySegments(bool a, bool b, bool c, bool d, bool e, bool f, bool g) {
  bool segments[] = {a, b, c, d, e, f, g};
  for (int i = 0; i < numSegments; i++) {
    digitalWrite(segmentPins[i], segments[i] ? HIGH : LOW);
  }
}
Fungsi displaySegments() menggunakan array segments untuk menentukan keadaan pin-pin seven segment display. Setelah itu, program akan mengatur keadaan pin-pin seven segment display sesuai dengan keadaan yang diinginkan.
void turnOffSegments() {
  for (int i = 0; i < numSegments; i++) {
    digitalWrite(segmentPins[i], LOW);
  }
}
Pada bagian turnOffSegments(), program akan mematikan semua pin-pin seven segment display.

Program ini akan berjalan dalam loop utama dan menunggu input dari keypad. Jika ada input, program akan menampilkan angka yang sesuai dengan tombol yang ditekan melalui seven segment display.






 Percobaan 2 Kondisi saat Button ditekan pada baris dan kolom yang ditentukan akan menampilkan angka yang sidah disetting misal: baris 1 kolom 1 menampilkan angka 1



Download HTML klik disini
Download Rangkaian Proteus klik disini
Download Program Arduino klik disini
Download Video klik disini
Download Datasheet 7-Segment klik disini
Download Datasheet Arduino klik disini
Download Datasheet Keypad klik disini


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


TUGAS PENDAHULUAN 2 MODUL 1 uP & uC

Modul 1

General Input dan Output


 

  • 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

a. Rangkaian Simulasi



Gambar Rangkaian Sebelum Disimulasikan





Gambar Rangkaian Disimulasikan

b. Prinsip Kerja

Disini  kita menggunakan Push button sebagai input pada arduino dimana push button berjumlah 8 dan dengan kondisi pull up dimana button sudah aktif saat kondisi awal untuk button 1-4 saat diaktifkan akan menapilkan kata "LEI" yang dihubungkan pada pin AO0 AO1, AO2, AO3, pada arduino sedangkan untuk button 5-8 yang terhubung pada pin AO4, AO5, 12, 13 akan menampilkan kata "DTE"

kemudian kita menggunakan LCD untuk menampilkan output dari program yang kita gunakan LCD disini untuk kaki D4, D5, D6, D7 itu terhubung pada pin 6, 5, 4, 3 pada arduino dimana pin D4, D5, D6, D7 berfungsi untuk mengirimkan data yang akan ditampilkan pada LCD baik angka, karakter maupun simbol

untuk kondisi awal saat tidak ada button yang aktif makan lcd akan menampilakan kata " silahkan tekan pada salah satu SW" yang mana sudah di program pada arduino berikut

if(Button1==LOW & Button2==LOW & Button3==LOW & Button5==LOW & Button5==LOW & Button6==LOW & Button7==LOW & Button8==LOW){
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Silahkan Tekan");
  lcd.setCursor(0, 1);
  lcd.print("Salah Satu SW");
  }

kemudian kita bisa menekan salah satu button 1-4 untuk melihat kondisi yang telah diprogram, misal untuk kondisi "LEI"

else if(Button1==HIGH || Button2==HIGH || Button3==HIGH || Button4==HIGH || Button5==LOW || Button6==LOW || Button7==LOW & Button8==LOW){
   lcd.clear();
   lcd.setCursor(1, 0);
   lcd.print("LEI");

lalu kita bisa melihat juga untuk kondisi "DTE" dapat menekan salah satu tombol dari button 5-8, seperti pada program berikut

else if(Button5==HIGH || Button6==HIGH || Button7==HIGH || Button8==HIGH || Button1==LOW || Button2==LOW || Button3==LOW & Button4==LOW){
   lcd.clear();
   lcd.setCursor(1, 0);
   lcd.print("DTE");

a. Flowchart








b. Listing Program

#include <LiquidCrystal.h>
#define PB1 A0
#define PB2 A1
#define PB3 A2
#define PB4 A3
#define PB5 A4
#define PB6 A5
#define PB7 12
#define PB8 13

const int rs = 11, en = 10, d4 = 6, d5 = 5, d6 = 4, d7 = 3;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

bool Button1,Button2,Button3,Button4,Button5,Button6,Button7,Button8;

void setup() {
  Serial.begin(9600);
  lcd.begin(16,2);

  pinMode(PB1, INPUT_PULLUP);
  pinMode(PB2, INPUT_PULLUP);
  pinMode(PB3, INPUT_PULLUP);
  pinMode(PB4, INPUT_PULLUP);
  pinMode(PB5, INPUT_PULLUP);
  pinMode(PB6, INPUT_PULLUP);
  pinMode(PB7, INPUT_PULLUP);
  pinMode(PB8, INPUT_PULLUP);
}

void loop() {
  Button1 = digitalRead(PB1);
  Button2 = digitalRead(PB2);
  Button3 = digitalRead(PB3);
  Button4 = digitalRead(PB4);
  Button5 = digitalRead(PB5);
  Button6 = digitalRead(PB6);
  Button7 = digitalRead(PB7);
  Button8 = digitalRead(PB8);


  if(Button1==LOW & Button2==LOW & Button3==LOW & Button5==LOW & Button5==LOW & Button6==LOW & Button7==LOW & Button8==LOW){
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Silahkan Tekan");
  lcd.setCursor(0, 1);
  lcd.print("Salah Satu SW");
  }
  else if(Button1==HIGH & Button2==HIGH & Button3==HIGH & Button4==HIGH || Button5==LOW & Button6==LOW & Button7==LOW & Button8==LOW){
   lcd.clear();
   lcd.setCursor(1, 0);
   lcd.print("LEI");
  }
  else if(Button5==HIGH & Button6==HIGH & Button7==HIGH & Button8==HIGH || Button1==LOW & Button2==LOW & Button3==LOW & Button4==LOW){
   lcd.clear();
   lcd.setCursor(1, 0);
   lcd.print("DTE");
  }
  else{
   lcd.clear();
   lcd.setCursor(0, 0);
   lcd.print("Error");
  }
  delay(100); // Tambahkan penundaan agar tampilan tidak berubah terlalu cepat
}

    Ketika button 1 - 4  aktifkan akan menampilkan kata “LEI” di kolom 2 , sedangkan saat button 5 - 8     akan menampilkan “DTE” di kolom 2







Download HTML klik disini
Download Rangkaian Proteus klik disini
Download Program Arduino klik disini
Download Video klik disini
Download Datasheet Push Button klik disini
Download Datasheet Arduino klik disini
Download Datasheet LCD 16 x 2 klik disini

TUGAS PENDAHULUAN 1 MODUL 1 uP & uC

Modul 1

General Input dan Output


 

  • 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

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
}

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


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   ...