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


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