Jumat, 03 Mei 2024

LA Modul 3 Percobaan 6





PERCOBAAN 5
Rangkaian Komunikasi SPI


1. Prosedur
[Kembali]
  1. Rangkailah seperti yang ada pada modul
  2. Buka Arduino IDE dan masukan listing Program
  3. Upload program ke arduino
  4. Mencoba rangkaian
2. Hardware dan Diagram Blok [Kembali]

A. Hardware

1. LED Matriks

2. DipSwitch 

3. Arduino Uno



B. Digram Blok



3. Rangkaian Simulasi dan Prinsip kerja [Kembali]



Prinsip Kerja 

 Master:
    Pada rangkaian percobaan Komunikasi SPI. Arduino yang bertindak sebagai master dalam sebuah sistem yang menggunakan switch sebagai input. Setiap switch saat ditekan yang mana terdapat 8 buat switch yang terhubung kearduino, Arduino akan terus memeriksa status setiap switch dengan menggunakan fungsi digitalRead(). Jika sebuah switch ditekan, Arduino akan mengirimkan karakter yang sesuai dengan menggunakan fungsi SPI.transfer. Karakter yang dikirimkan akan sesuai dengan switch yang ditekan, dan akan dibaca oleh perangkat arduino slave. 

Slave:
    Pada arduino yang kedua betindak sebagai Slave dimana  nantinya akan menerima inputan dari Arduino master dan mengeluarkan output berupa Dot matriks 8 x 8. Prinsip kerja rangkaian  di atas adalah untuk mengontrol output dot matriks yang terhubung ke pin Arduino berdasarkan status 8 switch yang terhubung ke pin digital lainnya. Pada setup(), pin-pin yang terhubung ke switch diatur sebagai input. Pada loop(), program akan terus memeriksa status switch tersebut. Jika switch on maka dot matriks pada baris dipswitch tersebut akan hidup hingga seterusnya serta sebaliknya.
    

4. FlowChart [Kembali]

A. Listing Program 

MASTER

#include <SPI.h>

const int SS_PIN = 10; // Slave Select pin
const int DIP_Pins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // Pin DIP switch terhubung ke Arduino
byte patterns[8] = {0}; // Pola LED untuk ditampilkan

void setup() {
SPI.begin();
pinMode(SS_PIN, OUTPUT);
digitalWrite(SS_PIN, HIGH); // Tidak memilih slave saat ini
for (int i = 0; i < 8; i++) {
pinMode(DIP_Pins[i], INPUT_PULLUP); // Mengatur pin DIP switch sebagai input dengan pull-up resistor
}
}

void loop() {
// Membaca status DIP switch dan mengupdate pola LED
for (int i = 0; i < 8; i++) {
if (digitalRead(DIP_Pins[i]) == LOW) {
patterns[i] = B11111111; // Mengatur semua LED menyala jika sakelar diaktifkan
} else {
patterns[i] = 0; // Mengatur semua LED mati jika sakelar tidak diaktifkan
}
}
 
// Mengirim data pola LED ke slave
digitalWrite(SS_PIN, LOW); // Memilih slave
for (int i = 0; i < 8; i++) {
SPI.transfer(patterns[i]);
}
digitalWrite(SS_PIN, HIGH); // Melepas slave
delay(100); // Delay untuk tampilan LED stabil

SLAVE

#include <SPI.h>
#include <LedControl.h> //Library untuk LED Dot Matrix
const int SS_PIN = 10; // Slave Select pin
LedControl lc=LedControl(2,3,4,1); // Pin DIN, CLK, LOAD (CS), dan jumlah Dot Matrix yang dihubungkan ke Arduino
void setup() {
 SPI.begin();
 pinMode(SS_PIN, INPUT); // SS_PIN sebagai input agar Arduino berperan sebagai slave
 lc.shutdown(0,false); // Mengaktifkan display
 lc.setIntensity(0,8); // Mengatur kecerahan LED (nilai antara 0 dan 15)
 lc.clearDisplay(0); // Membersihkan tampilan dot matrix
}
void loop() {
 if (digitalRead(SS_PIN) == LOW) { // Jika dipilih oleh master
 byte patterns[8];
 // Menerima data pola LED dari master
 for (int i = 0; i < 8; i++) {
 patterns[i] = SPI.transfer(0);
 }
 // Menampilkan pola LED pada dot matrix
 for (int row = 0; row < 8; row++) {
 lc.setRow(0, row, patterns[row]);
 }
 }
}
     
B. Flowchart





5. Video Demo [Kembali]


6. Kondisi [Kembali]

         Percobaan 6 sesuai dengan modul.

7. Analisa dan Pembahasan [Kembali]


8. Download File [Kembali]

Download HTML Klik disini
Download Video Demo Klik disini
Download Datasheet ARDUINO UNO Klik disini

LA Modul 3 Percobaan 5





PERCOBAAN 5
Rangkaian Komunikasi I2C


1. Prosedur
[Kembali]
  1. Rangkailah seperti yang ada pada modul
  2. Buka Arduino IDE dan masukan listing Program
  3. Upload program ke arduino
  4. Mencoba rangkaian
2. Hardware dan Diagram Blok [Kembali]

A. Hardware

1. Push Button


2. Arduino Uno


3. LED


B. Digram Blok


3. Rangkaian Simulasi dan Prinsip kerja [Kembali]




Prinsip Kerja 

    Master:
    Pada rangkaian  di atas merupakan percobaan Komunikasi I2C. Arduino yang pertama bertindak sebagai master dengan menggunakan push button sebagai input. Setiap button saat ditekan yang mana terdapat 2 buah button yang terhubung kearduino, Arduino akan terus memeriksa status setiap tombol dengan menggunakan fungsi digitalRead(). Jika sebuah button ditekan, Arduino akan mengirimkan karakter yang sesuai dengan menggunakan fungsi dari i2c. Karakter yang dikirimkan akan sesuai dengan button yang ditekan, dan akan dibaca oleh perangkat  arduino slave. 

Slave:
    Pada arduino yang kedua betindak sebagai Slave dimana  nantinya akan menerima inputan dari Arduino master dan mengeluarkan output berupa led. Prinsip kerja rangkaian  di atas adalah untuk mengontrol output led yang terhubung ke pin Arduino berdasarkan status dari button sesuai dengan program slave yang terhubung ke pin digital lainnya. Pada setup(), pin-pin yang terhubung ke button diatur sebagai input. Pada loop(), program akan terus memeriksa status button tersebut. 
    

4. FlowChart [Kembali]

A. Listing Program 

MASTER
#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); // Set button pin as input with internal pull-up resistor
 pinMode(BUTTON2, INPUT);
 Serial.begin(9600); // Initialize serial communication for debugging
}
void loop() {
 buttonState1 = digitalRead(BUTTON1);
 buttonState2 = digitalRead(BUTTON2);
 
 if (buttonState2 != buttonPrevState2){
 if(buttonState2 == HIGH){
 count++;
 }
 delay(50);
}
 buttonPrevState2 = buttonState2;
 if(count > 3){
 count = 0;
 }
if(count % 2 == 0){
 if (buttonState1 != buttonPrevState1) {
 if (buttonState1 == HIGH) {
 // 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
#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() {
 // Nothing to do here, all actions are performed in the receiveEvent function
}
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
 }
 }
}   

B. Flowchart



5. Video Demo [Kembali]




6. Kondisi [Kembali]

        Percobaan 5 sesuai dengan modul.

7. Analisa dan Pembahasan [Kembali]

8. Download File [Kembali]

Download HTML Klik disini
Download Video Demo Klik disini
Download Datasheet ARDUINO UNO Klik disini

Entri yang Diunggulkan

LA MODUL 3 PERCOBAAN 2

  PERCOBAAN 2 [KEMBALI KE MENU SEBELUMNYA] DAFTAR ISI 1. Jurnal 2. Alat dan Bahan 3. Rangkaian Simulasi 4. Prinsip Kerja Rangka...