TUGAS PENDAHULUAN 1 MODUL 3



Modul 3 Percobaan 2

1. Prosedur [Kembali]

1. Rangkai komponen sesuai percobaan dan kondisi yang dipilih.

2. Buat program menggunakan Arduino IDE.

3. Transfer program yang telah dibuat ke Arduino yang ada di Proteus.

4. Uji coba program di simulasi sesuai dengan kondisi yang diinginkan.

5. Proses selesai setelah uji coba berhasil dilakukan.


  • Hardware
 1. Arduino Uno

    2. Dip Switch

    3. SevenSegmen 


    4. Power supply

    5. Ground

  • Diagram Blok


    • Rangkaian Simulasi


    • Prinsip Kerja

    Pada kondisi 2 percobaan 1 digunakan dua Arduino Uno, dengan satu Arduino bertindak sebagai master dan Arduino lainnya bertindak sebagai penerima. Master Arduino terhubung ke bagian input, yaitu saklar DIP. Sedangkan slave Arduino dihubungkan dengan output 7 segmen 2 digit. Master Arduino bertindak sebagai Arduino yang meneruskan perintah ke slave Arduino melalui input. Di sisi lain, slave Arduino bertindak sebagai penerima dan menjalankan perintah dalam bentuk keluaran.

    Pada rangkaian ini kedua Arduino berkomunikasi satu sama lain menggunakan sistem SPI, dengan pin 10-13 dari master Arduino dihubungkan ke pin 10-13 dari Arduino slave. Jika 2 saklar pada saklar DIP aktif, keluarannya berupa angka pada digit ke 1 dalam tujuh segmen 2 digit . Jika saklar DIP mempunyai tiga saklar aktif, maka 7 segmen akan menampilkan angka 3 pada ke 2 digit (kedua digit 7 segmen aktif).

  • Flowchart
  • Arduino Master


  • Arduino Slave


  • Listing Program

MASTER 

#include <SPI.h> //// Mengimpor library SPI untuk komunikasi serial

// Mendeklarasikan pin-pin untuk dip switch
int dip[] = {2, 3, 4, 5, 6, 7, 8, 9};
int dipvalue[] = {}; // Array untuk menyimpan nilai pembacaan dari dip switch
int dipCount = 0; // Variabel untuk menghitung jumlah dip switch yang aktif

void setup() {
  Serial.begin(9600); // Memulai komunikasi serial dengan baud rate 9600
   // Mengatur semua pin dip switch sebagai input dengan pull-up resistor
  for (int i = 0; i < 8; i++) {
    pinMode(dip[i], INPUT_PULLUP);
  }
   // Memulai komunikasi SPI
  SPI.begin();
  // Mengatur pembagi clock SPI untuk mengontrol kecepatan data transfer
  SPI.setClockDivider(SPI_CLOCK_DIV8);
  // Mengatur Slave Select (SS) pin ke HIGH. Ini menandakan bahwa tidak ada komunikasi SPI yang aktif
  digitalWrite(SS, HIGH);
}

void loop() {
  byte Mastersend = 0; // Variabel untuk menyimpan data yang akan dikirim ke slave
  // Membaca nilai dari setiap dip switch dan menghitung berapa yang aktif (dalam posisi LOW)

  for (int i = 0; i < 8; i++) {
    dipvalue[i] = digitalRead(dip[i]);
    if (dipvalue[i] == LOW) {
      dipCount++; // Menambahkan jumlah dip switch yang aktif
    }
  }

  // Mengatur nilai Mastersend berdasarkan jumlah dip switch yang aktif
  if (dipCount == 2) {
    Mastersend = 2; // Jika hanya 2 dip switch yang aktif, kirim 2
  } else if (dipCount == 3) {
    Mastersend = 3; //Jika tiga dip switch yang aktif, kirim 3
  }

  dipCount = 0; // Reset dip switch count for next iteration

  // Mengirim nilai Mastersend ke slave melalui SPI
  digitalWrite(SS, LOW);  // Mengaktifkan slave dengan mengatur SS ke LOW
  SPI.transfer(Mastersend);  // Mengaktifkan slave dengan mengatur SS ke LOW
  delay(100); // Memberikan delay untuk memastikan slave memiliki waktu yang cukup untuk memproses data yang diterima
}

SLAVE 

#include <SPI.h> // Memasukkan library SPI untuk komunikasi serial peripheral interface.

// Mendefinisikan pin-pin untuk setiap segmen pada display 7-segmen.
#define a 9
#define b 8
#define c 7
#define d 6
#define e 5
#define f 4
#define g 3
#define dp 2 // Pin untuk titik desimal, tidak digunakan dalam contoh ini.
#define D1 A1 // Pin untuk mengaktifkan digit pertama.
#define D2 A3 // Pin untuk mengaktifkan digit kedua.
const int segmentPins[] = {a, b, c, d, e, f, g}; // Array yang berisi pin segmen a-g.

volatile boolean received = false; // Variabel untuk menandakan bahwa data telah diterima dari SPI.
volatile byte Slavereceived; // Variabel untuk menyimpan data yang diterima dari master melalui SPI.

void setup() {
  pinMode(D1, OUTPUT);
  pinMode(D2, OUTPUT);
  Serial.begin(9600);
  // Mengatur pin-pin segmen sebagai output.
  for (int i = 0; i < 7; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
  // Mengaktifkan SPI sebagai slave.
  SPCR |= _BV(SPE);
    // Mengaktifkan interrupt SPI untuk menerima data.
  SPI.attachInterrupt();
}

// Interrupt service routine yang dipanggil ketika data diterima via SPI.
ISR(SPI_STC_vect) {
  Slavereceived = SPDR;// Membaca data yang diterima ke variabel Slavereceived.
  received = true; // Menandai bahwa data telah diterima.
}

// Fungsi untuk menampilkan karakter pada display 7-segmen.
void displayCharacter(int digit, int digitPosition) {
   // Array untuk mendefinisikan pola segmen untuk menampilkan angka 0-9.
  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
  };

  // Menulis pola ke pin-pin segmen.
  for (int i = 0; i < 7; i++) {
    digitalWrite(segmentPins[i], patterns[digit][i]);
  }

  // Mengaktifkan digit yang sesuai berdasarkan posisi yang diberikan.
  if (digitPosition == D1) {
    digitalWrite(D1, HIGH);
    digitalWrite(D2, LOW);
  } else if (digitPosition == D2) {
    digitalWrite(D1, LOW);
    digitalWrite(D2, HIGH);
  }

  delay(5); // Memberikan delay untuk memastikan display stabil.
}

void loop() {   // Jika data diterima dari master.
  if (received) { // Cek nilai yang diterima dan menampilkan angka yang sesuai pada display 7-segmen.
    if (Slavereceived == 2) {
      displayCharacter(1, D1); //  Menampilkan angka 1 hanya pada digit 1.

     
    } else if (Slavereceived == 3) {
      displayCharacter(3, D1); // Menampilkan angka 3 pada digit 1.
      displayCharacter(3, D2); // Menampilkan angka 3 pada digit 2.
    }
    delay(100); // Memberikan delay sebelum menerima data berikutnya.
    received = false; // Mereset status penerimaan data.
  }
}



                                                   




6. Kondisi [Kembali]

Kondisi 1
Setiap 2 switch aktif muncul angka pada digit 1, setiap 3 switch aktif muncul angka berbeda pada digit 2

7. Download File [Kembali]

- HTML klik disini

- Rangkaian Simulasi  klik disini

- Video Demo  klik disini

- Listring Program  klik disini

- Datasheet ARDUINO UNO klik disini
     
- LED   klik disini
    
- Switch   Klik disini
  















Tidak ada komentar:

Posting Komentar