Tugas Pendahuluan 1

M3 P5 

 [Kembali ke Menu Sebelumnya]


MODUL 3: Communication
Tugas Pendahuluan 1

1. Susunlah susunan komponen dalam perangkat lunak Proteus sesuai dengan kondisi eksperimen.
2. Buatlah skrip untuk perangkat Arduino menggunakan perangkat lunak Arduino IDE.
3. Lakukan proses kompilasi untuk skrip tersebut, kemudian unggah ke perangkat Arduino.
4. Setelah proses pengunggahan selesai, aktifkan simulasi rangkaian dalam perangkat lunak Proteus.

a) Modul Arduino


b) Button





c) LED

d) Resistor
     

Percobaan 5


Percobaan 5

  Rangkaian ini terdiri dari dua unit Arduino: satu sebagai Arduino slave di sisi kiri bertugas menghasilkan output, dan yang lainnya sebagai Arduino master di sisi kanan bertugas menerima input dari dua tombol. Tombol atas berfungsi sebagai tombol logika, sementara tombol bawah sebagai tombol aktivasi. LED di sisi Arduino slave akan menyala apabila nilai dari tombol atas adalah ganjil dan nilai dari tombol bawah adalah genap. Nilai dari kedua tombol dapat dipantau melalui layar terminal virtual dengan rentang angka 0-3, dimana angka di sebelah kanan merepresentasikan nilai tombol bawah dan angka di sebelah kiri merepresentasikan nilai tombol atas. Komunikasi ini menggunakan sistem I2C.


Terdapat 3 kondisi yang didapat dari rangkaian diatas, dimana kondisi pertaa adalah semua led akan aktif. Ini terjadi saat logika 1 muncul. Lalu kondisi 2 adalah semua led akan non-aktif, terjadi saat logika bernilai 2., dan kondisi saat berlogika 3 adalah 4 led akan melakukan blinking, dimana berurutan dari kiri ke kanan. Oleh karena itu agar blinking dapat terlihat, 4 led diletakkan secara berbaris.

4. Flowchart [Kembali]

Percobaan 5

//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 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
    }
  }
}

Pada percobaan 5 modul 3, tidak terdapat kondisi, yang menyebabkan penulis hanya menjelaskan kondisi dari modul yan diberikan 
Percobaan 5




Untuk HTML di sini
Unduh Rangkaian Simulasi di sini
Unduh Program Slave di sini
Unduh Program Master di sini
Unduh Video Simulasi di sini

No comments:

Post a Comment

Periodic Relationships Among The Elements

  BAHAN PRESENTASI MATA KULIAH KIMIA 1  2020 OLEH M.Sean Mahogra Radi 2010952044 DOSEN PENGAMPU Dr.Darwison,MT Referensi: Chang, R. and Gold...