TUGAS PENDAHULUAN 2 MODUL 3



Modul 3 Percobaan 3

1. Prosedur [Kembali]

    • Rangkailah seperti rangkaian berikut
    • Buka Arduino IDE dan masukan listing program
    • Upload program ke arduino
    • Variasikan kondisi keypad dan amati keluarannya pada LCD

  • Hardware
  1. Arduino Uno

    2. Keypad

    3. LCD

    4. Power supply

    5. Ground



  • Diagram Blok



    • Rangkaian Simulasi


    • Prinsip Kerja
Pada percobaan 3 kondisi 1, disini menggunakan komunikasi data I2C yang mana komunikasi ini bersifat half duplex artinya data yang dikirim dan diterima dalam waktu yang berbeda dan secara bergantian. nah, kita menggunakan 2 arduino uno yang terhubung ke keypad 4x4 dan LCD. master menggunakan keypad sebagai pengirim data dan slave menggunakan LCD sebagai penerima data. Cara kerjanya kita mengklik satu" maka input akan keluar pada LCD sesuai dengan angka yang ditekan, jika mengklik keypad secara bersamaan maka terjadinya bertabrakan informasi.


  • Flowchart
  • Arduino Master

  • Arduino Slave


  • Listing Program

//MASTER 

#include <Keypad.h>  //Mendefinisikan library Keypad yang digunakan untuk membaca input dari keypad.
#include <Wire.h> //Mendefinisikan library Wire yang digunakan untuk komunikasi I2C.

const byte ROWS = 4;
const byte COLS = 3; //Mendefinisikan jumlah baris dan kolom pada keypad.

char keys[ROWS][COLS] = {
  // Mendefinisikan pin-pin yang terhubung ke baris dan kolom pada keypad.
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'},
};

char rowPins[ROWS] = {5, 4, 3, 2}; // Mendefinisikan pin-pin yang terhubung ke baris
char colPins[COLS] = {6, 7, 8};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
//Membuat objek keypad dengan menggunakan konstruktor Keypad, yang diinisialisasi
//dengan matriks karakter keys, pin-pin baris, pin-pin kolom, jumlah baris, dan
//jumlah kolom.

void setup() //Fungsi setup() yang digunakan untuk melakukan inisialisasi.
{
  Wire.begin(); // join i2c bus (address optional for master) Memulai komunikasi I2C.
}

//byte x = 0;

void sendData(char data) {
  Wire.beginTransmission(4);
  Wire.write(data);
  Wire.endTransmission();
}

void loop() {
  char key = keypad.getKey();
  if (key) {
    sendData(key);
   
  }
}



//Slave Arduino

#include <LiquidCrystal.h>
#include <Wire.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // Mendefinisikan pin LCD.

void startUp() {
  initialize(); // Memanggil fungsi inisialisasi.
}

void doTasks() {
  waitForData(); // Menunggu penerimaan data.
}

void initialize() {
  lcd.begin(16, 2); // Memulai LCD dengan ukuran 16x2.
  initiateI2C();    // Memulai komunikasi I2C.
  registerEvent(); // Mendaftarkan penanganan event untuk penerimaan data I2C.
  startSerial();   // Memulai komunikasi serial untuk debugging.
}

void waitForData() {
  while (hasData()) { // Selama ada data yang tersedia.
    char receivedData = receiveData(); // Menerima data.
    printReceivedData(receivedData);   // Mencetak data yang diterima.
    displayData(receivedData);         // Menampilkan data pada LCD.
    delay(100); // Memberikan jeda.
  }
}

bool hasData() {
  return Wire.available(); // Memeriksa apakah ada data yang tersedia di bus I2C.
}

char receiveData() {
  return Wire.read(); // Membaca data dari bus I2C.
}

void printReceivedData(char data) {
  Serial.println(data); // Mencetak data yang diterima untuk debugging.
}

void displayData(char data) {
  lcd.clear();  // Menghapus konten LCD.
  lcd.setCursor(0, 0); // Mengatur kursor LCD ke posisi atas-kiri.
  lcd.print(data); // Menampilkan data pada LCD.
}

void initiateI2C() {
  Wire.begin(4); // Memulai komunikasi I2C dengan alamat slave 4.
}

void registerEvent() {
  Wire.onReceive(receiveEvent); // Mendaftarkan penanganan event untuk penerimaan data I2C.
}

void receiveEvent(int howMany) {
  // Tidak perlu diimplementasikan, logika ditangani di dalam fungsi waitForData.
}

void startSerial() {
  Serial.begin(9600); // Memulai komunikasi serial dengan kecepatan 9600 baud.
}

void setup() {
  startUp(); // Memulai proses setup.
}

void loop() {
  doTasks(); // Melakukan tugas utama.
}



                                                   




6. Kondisi [Kembali]

key 1 - 9 menampilkan karakter nomor 9 - 1 secara berurut di kolom kedua LCD.


7. Download File [Kembali]

- HTML klik disini

- Rangkaian Simulasi  klik disini

- Video Demo  klik disini

- Listring Program  klik disini

- Datasheet  Arduino Uno Klik Disini



















Tidak ada komentar:

Posting Komentar