Laporan Akhir 2




Laporan Akhir 2 Modul 3
Percobaan 2

1. Prosedur
[Kembali]

1. Rangkai rangkaian sesuai dengan modul praktikum.
2. Tulis program untuk arduino di software Arduino IDE.
3. Sambungkan arduino dengan laptop
4. Upload program tadi ke arduino 
5. Setelah program selesai di upload, jalankan simulasi rangkaian
6. Periksa apakah rangkaian sensuai dengan yang diharapkan, jika tidak, perbaiki rangkaian dan/atau program yang terkait

2. Hardware dan Diagram Blok [Kembali]

Hardware :

1. Arduino



   2. Seven Segment

      3 Resistor
      4. Power Supply
      5. Ground
      6. Dipswitch

Diagram Blok:




3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]

Rangkaian Simulasi :



Prinsip Kerja :

Percobaan ini menggunakan komunikasi antara dua Arduino menggunakan protokol SPI (Serial Peripheral Interface). Arduino Master memiliki delapan pin input yang terhubung dengan sakelar DIP. Ketika salah satu sakelar DIP ditekan, program akan membaca nilai digital pada pin tersebut dan mengirimkan nomor pin yang sesuai melalui komunikasi SPI ke Arduino Slave.

Pada Arduino Slave, program akan menerima data yang dikirimkan oleh Arduino Master melalui komunikasi SPI. Data yang diterima kemudian digunakan untuk menentukan pola yang akan ditampilkan pada display seven-segment yang terhubung dengan delapan pin output. Program Slave menggunakan matriks dua dimensi untuk menyimpan pola-pola biner yang merepresentasikan angka 0 hingga 9. Berdasarkan data yang diterima dari Master, program akan mengambil pola biner yang sesuai dari matriks dan menuliskannya ke pin-pin output yang terhubung dengan display seven-segment, sehingga angka yang sesuai akan ditampilkan.

4. Flowchart dan Listing Program [Kembali]

Flowchart :





Listing Program :

//Master Arduino

#include<SPI.h> //Library untuk SPI

// Mendefinisikan array untuk menyimpan nomor pin untuk sakelar DIP
int dip[] = {2,3,4,5,6,7,8,9};

// Mendefinisikan array untuk menyimpan nilai yang dibaca dari sakelar DIP
int dipvalue[] = {};

void setup (){
  Serial.begin(9600); //Memulai Komunikasi Serial pada Baud Rate 115200
  
  // Menginisialisasi pin sakelar DIP sebagai INPUT_PULLUP
  for(int i = 0; i < 8; i++){
    pinMode(dip[i], INPUT_PULLUP);
  }
  
  SPI.begin(); //Memulai komunikasi SPI
  SPI.setClockDivider(SPI_CLOCK_DIV8); //Mengatur clock untuk komunikasi SPI pada 8 (16/8=2Mhz)
  
  digitalWrite(SS,HIGH); // Menetapkan SlaveSelect sebagai HIGH (Sehingga master tidak terhubung dengan slave)
}

void loop(void){
  byte Mastersend;
  int x = 1;
  
  // Membaca status sakelar DIP
  for(int i = 0; i < 8; i++){
    dipvalue[i] = digitalRead(dip[i]);
    if(dipvalue[i] == LOW){
      x = dip[i]; // Jika sakelar dalam keadaan LOW, atur x ke nomor pin yang sesuai
    }
  }
  
  digitalWrite(SS, LOW); //Memulai komunikasi dengan Slave yang terhubung ke master
  Mastersend = x; // Mengatur Mastersend ke nomor pin sakelar DIP yang dipilih
  Serial.println(Mastersend); // Mencetak nilai Mastersend ke monitor serial
  SPI.transfer(Mastersend); //Mengirim nilai Mastersend ke slave dan juga menerima nilai dari slave
  delay(1000);
}

//Slave Arduino:
#include<SPI.h>

// Definisikan nomor pin untuk segmen
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};

// Flag untuk menandakan apakah data diterima
volatile boolean received = false;

// Variabel untuk menyimpan data yang diterima dari master
volatile byte Slavereceived;

void setup(){
  Serial.begin(9600);
  
  // Atur pin segmen sebagai OUTPUT
  for (int i = 0; i < 8; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
  
  SPCR |= _BV(SPE); // Aktifkan SPI dalam Mode Slave
  SPI.attachInterrupt(); // Interrupt ON diatur untuk komunikasi SPI
}

// Fungsi rutin layanan interupsi untuk SPI
ISR (SPI_STC_vect){
  Slavereceived = SPDR; // Nilai yang diterima dari master disimpan dalam variabel Slavereceived
  received = true; // Menetapkan received sebagai True
}

void loop(){
  Serial.println(Slavereceived);
  
  if(received){
    // Logika untuk MENYETEL LED ON ATAU OFF tergantung pada nilai yang diterima dari master
    displayCharacter(Slavereceived);
    delay(1000);
  }
}

void displayCharacter(int ch) {
  byte patterns[10][7] = {
    {0, 0, 0, 0, 0, 0, 1}, // 0
    {1, 0, 0, 1, 1, 1, 1}, // 1
    {0, 0, 1, 0, 0, 1, 0}, // 2
    {0, 0, 0, 0, 1, 1, 0}, // 3
    {1, 0, 0, 1, 1, 0, 0}, // 4
    {0, 1, 0, 0, 1, 0, 0}, // 5
    {0, 1, 0, 0, 0, 0, 0}, // 6
    {0, 0, 0, 1, 1, 1, 1}, // 7
    {0, 0, 0, 0, 0, 0, 0}, // 8
    {0, 0, 0, 0, 1, 0, 0}  // 9
  };
  
  if ((ch >= 0 && ch <= 9)) {
    // Dapatkan indeks digit (0-9) dari karakter
    int index = ch;
    
    // Tulis pola ke pin segmen
    for (int i = 0; i < 7; i++) {
      digitalWrite(segmentPins[i], patterns[index][i]);
    }
  }
}

5. Kondisi [Kembali]

Percobaan  2
Komunikasi SPI menggunakan Arduino


6. Video Demo [Kembali]




7. Download File [Kembali]

Video Percobaan klik disini
Listing Program klik disini
Datasheet Arduino klik disini
Datasheet DIP Switch klik disini
Datasheet Seven Segment klik disini




















BAHAN PRESENTASI MATA KULIAH JURUSAN TEKNIK ELEKTRO