NIM : 2110951004

.

Minggu, 12 Mei 2024

M3_LA 1_Prak UpUc




MODUL III
PERCOBAAN 5
1. Prosedur
[Kembali]
  1. Rangkai seluruh komponen alat dan bahan yang diperlukan sesuai dengan kondisi percobaan yang dipilih.
  2. Buat program arduino pada aplikasi Arduino IDE sesuai dengan kondisi percobaan. Pastikan aplikasi Arduino IDE sudah mendownload library yang dibutuhkan dan sudah memilih board arduino yang sesuai.
  3. Verifikasi atau upload program pada arduino. 
  4. Jalankan atau uji coba rangkaian yang telah dibuat sesuai dengan kondisi.
  5. Perhatikan rangkaian dan output apakah sesuai dengan kondisi.
  6. Rangkaian telah selesai dibuat.
2. Hardware dan Diagram Blok [Kembali]
    a) Hardware

    b) Diagram Blok

3. Rangkaian Simulasi dan Prinsip kerja [Kembali]
    a) Rangkaian Simulasi

    b) Prinsip Kerja
Inisialisasi:

  • Pada Arduino Master, library Wire digunakan untuk menginisialisasi komunikasi I2C dan serial untuk debugging.
  • Pada Arduino Slave, library Wire juga digunakan untuk menginisialisasi komunikasi I2C dan juga mengatur pin LED sebagai output.

Loop Utama Master:

  • Arduino Master terus memeriksa status tombol. Jika tombol kedua ditekan (BUTTON2), variabel count akan bertambah satu setiap kali tombol ditekan.
  • Jika count habis dibagi 2 (count % 2 == 0), Arduino Master akan memeriksa status tombol pertama (BUTTON1). Jika tombol pertama ditekan (BUTTON1), variabel counter akan bertambah satu dan nilai counter akan dikirim ke Arduino Slave melalui I2C.
  • Jika count habis dibagi 3 (count % 3 == 0), Arduino Master akan mengirim sinyal endTransmission ke Arduino Slave.

Loop Utama Slave:

        Arduino Slave tidak melakukan apa-apa dalam loop utamanya karena semua aksi dikendalikan oleh fungsi receiveEvent saat menerima data dari Arduino Master.

Fungsi receiveEvent:

  • Ketika Arduino Slave menerima data dari Arduino Master, fungsi receiveEvent akan dijalankan.
  • Data yang diterima akan diproses untuk mengendalikan LED sesuai dengan perintah yang diterima.
  • Jika perintah adalah 1, semua LED akan dinyalakan.
  • Jika perintah adalah 2, semua LED akan dimatikan.
  • Jika perintah adalah 3, semua LED akan berkedip sebanyak lima kali.

4. Flowchart dan Listing Program [Kembali]
    a) Flowchart

    b) Listing Program

Master
#include <Wire.h>

#define SLAVE_ADDRESS 9
#define BUTTON1 2
#define BUTTON2 3

int buttonState1 = 0;
int buttonState2 = 0;
int buttonPrevState1 = 0;
int buttonPrevState2 = 0;
unsigned int counter = 0;
unsigned int count = 0;

void setup() {
  Wire.begin();
  pinMode(BUTTON1, INPUT_PULLUP);
  pinMode(BUTTON2, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  buttonState1 = digitalRead(BUTTON1);
  buttonState2 = digitalRead(BUTTON2);
 
  if (buttonState2 != buttonPrevState2) {
    if (buttonState2 == LOW) {
      count++;
    }
    delay(50);
  }
  buttonPrevState2 = buttonState2;
 
  if (count > 3) {
    count = 0;
  }
 
  if (count % 2 == 0) {
    if (buttonState1 != buttonPrevState1) {
      if (buttonState1 == LOW) {
        counter++;
        Wire.beginTransmission(SLAVE_ADDRESS);
        Wire.write(counter);
        Wire.endTransmission();
      }
      delay(50);
    }
    buttonPrevState1 = buttonState1;
    if (counter > 3) {
      counter = 0;
    }
  } else if (count % 3 == 0) {
    Wire.endTransmission();
  }
 
  Serial.print(count);
  Serial.println(counter);
}

Slave
#include <Wire.h>

#define LED_COUNT 8
#define LED_PIN_START 2

void setup() {
  Serial.begin(9600);
  Wire.begin(9);
  Wire.onReceive(receiveEvent);
 
  for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
    pinMode(i, OUTPUT);
  }
}

void loop() {
  // Tidak ada yang perlu dilakukan di sini, semua tindakan dilakukan di fungsi receiveEvent
}

void receiveEvent(int numBytes) {
  unsigned int command = Wire.read();
  Serial.println(command);
  delay(500);
 
  if (command == 1) {
    // Menyalakan semua LED
    for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
      digitalWrite(i, HIGH);
    }
  } else if (command == 2) {
    // Mematikan semua LED
    for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
      digitalWrite(i, LOW);
    }
  } else if (command == 3) {
    // Berkedipkan semua LED
    for (int j = 0; j < 5; j++) {
      for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
        digitalWrite(i, HIGH);
        delay(1000);
      }
      delay(500);
      for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
        digitalWrite(i, LOW);
        delay(1000);
      }
      delay(500);
    }
  }
}

5. Video Demo [Kembali]
6. Kondisi [Kembali]
    Percobaan 5  Komunikasi I2C

7. Download File [Kembali]
HTML Blog 
Share:

0 komentar:

Posting Komentar

Blogger news

Blogger templates