Laporan Akhir 1 Modul 3




Laporan Akhir 1 Modul 3
(Percobaan 5)

1. Prosedur
[Kembali]

1. Rangkai komponen sesuai percobaan dan kondisi yang dipilih.
2. Buat program menggunakan Arduino IDE.
3. Compile program yang telah dibuat lalu Upload ke dalam Arduino Uno.
4. Uji coba program pada rangkaian percobaan sesuai dengan kondisi yang diinginkan.
5. Selesai

2. Hardware dan Diagram Blok [Kembali]

Hardware :
 
1. Arduino Uno



 
2. LED

 
3. Button
 
 



4. Resistor
 


Diagram Blok :




3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi :



Prinsip Kerja :

Pada Percobaan 5 ini terdapat 2 buah arduino yaitu Arduino master dan Arduino slave. Arduino master mengirim pesan dari button, sementara Arduino slave menerima pesan tersebut dan menampilkannya lewat LED melalui komunikasi I2C. 
Komunikasi I2C diinisialisasi pada Arduino master dengan menggunakan Wire.begin(), menunjukkan bahwa Arduino tersebut bertindak sebagai master.  
Pada saat button ditekan, karakter dikirim melalui I2C ke Arduino slave, arduino slave juga menginisialisasi komunikasi I2C dengan menggunakan Wire.begin(9) dan bertindak sebagai slave dengan alamat I2C 9. 
Ketika data diterima dari master melalui I2C, fungsi receiveEvent akan diaktifkan secara otomatis di Arduino slave. Dengan cara ini, data dapat dikirim dari Arduino master ke Arduino slave melalui I2C, dan Arduino slave akan menampilkan pesan dalam bentuk LED dalam keadaan logika 1 atau 0.


4. Flowchart dan Listing Program [Kembali]

Flowchart :




Listing Program :

Master

//Master Arduino (sebelah kanan)
#include <Wire.h>
#define SLAVE_ADDRESS 9 // Slave Arduino address

#define BUTTON1 2 // Pin for the push button
#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(); // Initialize I2C communication
  pinMode(BUTTON1, INPUT_PULLUP); // Set button pin as input with internal pull-up resistor
  pinMode(BUTTON2, INPUT_PULLUP);
  Serial.begin(9600); // Initialize serial communication for debugging
}

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) {
      // Button is pressed
      counter++;
      Wire.beginTransmission(SLAVE_ADDRESS);
      Wire.write(counter); // Send command to the slave
      Wire.endTransmission();
    }
    delay(50); // Debouncing delay
  }
 
  buttonPrevState1 = buttonState1;

  if(counter > 3){
    counter = 0;
  }
}else if(count % 3 == 0){
  Wire.endTransmission();
}
Serial.print(count); Serial.println(counter);
}


Slave

//Slave Arduino (sebelah kiri)
#include <Wire.h>
#define LED_COUNT 8
#define LED_PIN_START 2 // Start pin for the LEDs

void setup() {
  Serial.begin(9600);
  Wire.begin(9); // Initialize I2C communication as Slave with address 9
  Wire.onReceive(receiveEvent); // Register event for receiving data
  for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
    pinMode(i, OUTPUT); // Set LED pins as output
  }
}

void loop() {
}

void receiveEvent(int numBytes) {
  unsigned int command = Wire.read(); // Read incoming command from master
  Serial.println(command);
  delay(500);
  if (command == 1) {
    // Turn all LEDs ON
    for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
      digitalWrite(i, HIGH);
    }
  } else if (command == 2) {
    // Turn all LEDs OFF
    for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
      digitalWrite(i, LOW);
    }
  } else if (command == 3) {
    // Blink all LEDs
    for (int j = 0; j < 5; j++) { // Repeat the blinking 5 times
      for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
        digitalWrite(i, HIGH);
        delay(1000);
      }
      delay(500); // Delay for ON state
      for (int i = LED_PIN_START; i < LED_PIN_START + LED_COUNT; i++) {
        digitalWrite(i, LOW);
        delay(1000);
      }
      delay(500); // Delay for OFF state
    }
  }
}

5. Kondisi [Kembali]

Percobaan 5 Komunikasi I2C

6. Video Demo [Kembali]



7. Download File [Kembali]

Download HTML klik disini
Download Video Demo klik disini
Download Listing Program klik disini
Download Datasheet Arduino klik disini
Download Datasheet Push Button klik disini
Download Datasheet LED klik disini
Download Datasheet Resistor klik disini

Tidak ada komentar:

Posting Komentar

  BAHAN PRESENTASI MATA KULIAH ELEKTRONIKA Nama: Vigo Danovan Saputra NIM: 2110951023 kelas: Elektronika C Dosen Pengampu ; Darwison,M.T Ref...