Jumat, 03 Mei 2024

Laporan 2 M3




PERCOBAAN 6
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



3. Rangkaian Simulasi dan Prinsip kerja [Kembali]





Prinsip Kerja 

 Master:
    Serangkaian percobaan komunikasi SPI sedang berlangsung. Arduino  bertindak sebagai master  sistem dengan menggunakan saklar sebagai input. Ketika setiap saklar ditekan, 8 diantaranya terhubung ke Arduino, dan Arduino  terus memeriksa status setiap saklar menggunakan fungsi digitalRead(). Ketika sebuah saklar ditekan, Arduino  mengirimkan karakter yang sesuai  menggunakan fungsi SPI.transfer. karakter yang dikirim sesuai dengan sakelar yang ditekan dan  dibaca oleh perangkat budak Arduino.


Slave:
    Arduino kedua berperan sebagai slave yang  menerima input dari master Arduino  dan menghasilkan output berupa dot matrik berukuran 8x8. Prinsip kerja rangkaian diatas adalah  mengontrol output dot matrik yang terhubung ke pin Arduino berdasarkan status dari 8 switch yang terhubung ke pin digital. setup() menyetel pin yang terhubung ke sakelar sebagai input. Program terus memeriksa status saklar di loop(). saat sakelar dalam keadaan hidup, matriks titik pada baris sakelar DIP juga dalam keadaan hidup, dan 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

7. Analisa dan Pembahasan [Kembali]





8. Download File [Kembali]

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

Laporan 1 M3




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



3. Rangkaian Simulasi dan Prinsip kerja [Kembali]




Prinsip Kerja 

    Master:
    Rangkaian di atas merupakan eksperimen komunikasi I2C, Arduino  pertama bertindak sebagai master dengan menggunakan tombol sebagai input. Menekan setiap tombol akan menghubungkan kedua tombol ke Arduino. Arduino  terus memeriksa status setiap tombol  menggunakan fungsi digitalRead(). Ketika sebuah tombol ditekan, Arduino mengirimkan karakter yang sesuai menggunakan fungsi i2c. Karakter yang dikirim sesuai dengan tombol yang ditekan dan  dibaca oleh perangkat slave Arduino.


Slave:
    Arduino kedua berperan sebagai slave, menerima input dari master Arduino  dan menghasilkan output berupa LED.Prinsip kerja rangkaian diatas adalah  mengontrol output LED yang terhubung ke pin Arduino berdasarkan status tombol sesuai  program slave yang terhubung ke pin digital lain.setup() menyetel pin yang terhubung ke tombol sebagai input. Program terus memeriksa status tombol di loop().

    

4. FlowChart [Kembali]

A. Listing Program 

MASTER
//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_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
#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

7. Analisa dan Pembahasan [Kembali]




8. Download File [Kembali]

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