TP 2 M3
      1. Arduino Uno
      2. Seven Segment
      4. Resistor
Diagram Blok :
2. Prosedur Percobaan [Kembali]
1. Rangkai semua komponen sesuai kondisi yang dipilih
2. buat program di aplikasi arduino IDE
3. setelah selesai masukkan program ke arduino di proteus
4.  jalankan program pada simulasi dan cobakan sesuai dengan modul dan kondisi
5. Selesai
Program Perhitungan dan Tampilan Hasil pada Seven Segment
Program yang Anda jelaskan akan dijalankan pada Arduino master terlebih dahulu. Program ini akan menghitung jumlah switch yang aktif pada DIP switch. Ada dua kondisi utama dalam program ini:
Kondisi 1:
- Jika 3 switch aktif, maka seven segment akan menampilkan angka dari 0-5 pada digit pertama dan 6-9 pada digit kedua.
Kondisi 2:
- Jika 4 switch aktif, maka seven segment akan menampilkan angka dari 6-9 pada digit pertama dan 0-5 pada digit kedua.
Kondisi Lainnya:
- Jika jumlah switch yang aktif tidak sesuai dengan kondisi 1 atau 2, maka seven segment tidak akan menampilkan angka.
Proses Alur Program:
- Program dijalankan pada Arduino master.
- Program membaca status DIP switch dan menghitung jumlah switch yang aktif.
- Program menentukan kondisi yang sesuai berdasarkan jumlah switch yang aktif.
- Program mengirimkan perintah ke Arduino slave berdasarkan kondisi yang ditentukan.
- Arduino slave menerima perintah dari Arduino master.
- Arduino slave menampilkan angka pada seven segment sesuai dengan perintah yang diterima.
Peran Arduino Master dan Arduino Slave:
- Arduino Master: Berfungsi untuk membaca status DIP switch, menghitung jumlah switch yang aktif, menentukan kondisi yang sesuai, dan mengirimkan perintah ke Arduino slave.
- Arduino Slave: Berfungsi untuk menerima perintah dari Arduino master dan menampilkan angka pada seven segment sesuai dengan perintah yang diterima.
Komunikasi Antara Arduino Master dan Arduino Slave:
Komunikasi antara Arduino master dan Arduino slave dapat dilakukan menggunakan berbagai metode, seperti UART, I2C, atau SPI. Dalam program ini, metode yang digunakan tidak disebutkan secara eksplisit.                                
Program yang Anda jelaskan akan dijalankan pada Arduino master terlebih dahulu. Program ini akan menghitung jumlah switch yang aktif pada DIP switch. Ada dua kondisi utama dalam program ini:
Kondisi 1:
- Jika 3 switch aktif, maka seven segment akan menampilkan angka dari 0-5 pada digit pertama dan 6-9 pada digit kedua.
Kondisi 2:
- Jika 4 switch aktif, maka seven segment akan menampilkan angka dari 6-9 pada digit pertama dan 0-5 pada digit kedua.
Kondisi Lainnya:
- Jika jumlah switch yang aktif tidak sesuai dengan kondisi 1 atau 2, maka seven segment tidak akan menampilkan angka.
Proses Alur Program:
- Program dijalankan pada Arduino master.
- Program membaca status DIP switch dan menghitung jumlah switch yang aktif.
- Program menentukan kondisi yang sesuai berdasarkan jumlah switch yang aktif.
- Program mengirimkan perintah ke Arduino slave berdasarkan kondisi yang ditentukan.
- Arduino slave menerima perintah dari Arduino master.
- Arduino slave menampilkan angka pada seven segment sesuai dengan perintah yang diterima.
Peran Arduino Master dan Arduino Slave:
- Arduino Master: Berfungsi untuk membaca status DIP switch, menghitung jumlah switch yang aktif, menentukan kondisi yang sesuai, dan mengirimkan perintah ke Arduino slave.
- Arduino Slave: Berfungsi untuk menerima perintah dari Arduino master dan menampilkan angka pada seven segment sesuai dengan perintah yang diterima.
Komunikasi Antara Arduino Master dan Arduino Slave:
Komunikasi antara Arduino master dan Arduino slave dapat dilakukan menggunakan berbagai metode, seperti UART, I2C, atau SPI. Dalam program ini, metode yang digunakan tidak disebutkan secara eksplisit.
4. Flowchart dan Listing Program [Kembali]
arduino master 
//Master Arduino
#include<SPI.h> //Library for SPI
int dip[] = {2,3,4,5,6,7,8,9};
int dipvalue[] = {}; // Array kosong yang dideklarasikan untuk menyimpan nilai baca sakelar.
void setup (){
Serial.begin(9600); // Memulai Komunikasi Serial pada Baud Rate 115200
for(int i = 0; i < 8; i++){ // Loop untuk menetapkan mode pin
pinMode(dip[i], INPUT_PULLUP); // Menetapkan setiap pin sebagai input dengan resistor pull-up diaktifkan.
}
SPI.begin(); // Memulai komunikasi SPI sebagai master
SPI.setClockDivider(SPI_CLOCK_DIV8); // Mengatur clock untuk komunikasi SPI pada 8 (16/8=2Mhz)
digitalWrite(SS,HIGH); // Mengatur pin Slave Select (SS) ke HIGH, membuat perangkat slave tidak aktif hingga komunikasi dimulai.
}
void loop(void) {
  byte Mastersend;
  int x = 1;
  int activeSwitches = 0; // Variabel untuk menghitung jumlah saklar yang aktif
  // Membaca status saklar dan menghitung berapa yang aktif
  for (int i = 0; i < 8; i++) {
    dipvalue[i] = digitalRead(dip[i]);
    if (dipvalue[i] == LOW) {
      x = dip[i];
      activeSwitches++; // Menambah penghitung activeSwitches jika saklar aktif
    }
  }
  // Jika 3 saklar aktif, tampilkan counter 0-5 di digit pertama
  if (activeSwitches == 3) {
    // Tampilkan counter 0-5 di digit pertama
      digitalWrite(SS, LOW);
      Mastersend = 3; // Menetapkan nilai 3 ke Mastersend. Nilai ini akan digunakan untuk mengontrol perilaku tampilan.
      Serial.println(Mastersend); // Mencetak nilai Mastersend ke monitor serial untuk debugging.
      SPI.transfer(Mastersend); // Mengirim nilai Mastersend ke perangkat slave melalui komunikasi SPI.
      delay(100);
    // Lanjutkan counting dari 6-9 di digit kedua
  }
  
  // Jika 4 saklar aktif, tampilkan counter 0-5 di digit kedua
  else if (activeSwitches == 4) {
    // Tampilkan counter 0-5 di digit kedua
      digitalWrite(SS, LOW);
      Mastersend = 4; // Shift 4 bit ke kiri untuk menetapkan digit kedua
      Serial.println(Mastersend);
      SPI.transfer(Mastersend);
      delay(100);
    // Lanjutkan counting dari 6-9 di digit pertama
  }
}
ARDUINO SLAVE
#include <SPI.h>
// Pinout untuk tujuh segmen display
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
// Variabel untuk menandai apakah data telah diterima dari master
volatile boolean received = false;
// Variabel untuk menyimpan data yang diterima dari master
volatile byte Slavereceived;
// Variabel untuk indeks
int index;
// Pin untuk mengontrol digit pertama dan kedua pada tujuh segmen display
int dg1 = A1;
int dg2 = A0;
void setup() {
  Serial.begin(9600);
  // Setiap pin segment sebagai output
  for (int i = 0; i < 8; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
  // Set pin digit sebagai output
  pinMode(dg1, OUTPUT);
  pinMode(dg2, OUTPUT);
  // Aktifkan SPI dalam mode slave
  SPCR |= _BV(SPE);
  // Aktifkan interrupt untuk komunikasi SPI
  SPI.attachInterrupt();
}
// Fungsi ISR (Interrupt Service Routine) untuk menangani interrupt SPI
ISR (SPI_STC_vect) {
  // Menyimpan nilai yang diterima dari master ke variabel Slavereceived
  Slavereceived = SPDR;
  // Set flag received sebagai true
  received = true;
}
// Fungsi untuk menampilkan karakter pada tujuh segmen display
void displayCharacter(int ch) {
  // Pola untuk digit dari 0 hingga 9 pada tujuh segmen display
  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
  };
  // Jika nilai berada dalam rentang 0-9
  if ((ch >= 0 && ch <= 9)) {
    // Mendapatkan indeks digit (0-9) dari karakter
    int index = ch;
    
    // Menulis pola ke pin segmen
    for (int i = 0; i < 7; i++) {
      digitalWrite(segmentPins[i], patterns[index][i]);
    }
  }
}
// Fungsi loop
void loop() {
  // Jika data diterima dari master
  if (received) {
    Serial.println(Slavereceived);
    // Jika data yang diterima adalah 3
    if (Slavereceived == 3) {
      // Menampilkan angka dari 0 hingga 5 pada digit pertama
      for (int i = 0; i <= 9; i++) {
        if (i <= 5) {
          digitalWrite(dg1, HIGH);
          digitalWrite(dg2, LOW);
          displayCharacter(i);
          delay(100);
        } else {
          // Menampilkan angka dari 6 hingga 9 pada digit kedua
          digitalWrite(dg2, HIGH);
          digitalWrite(dg1, LOW);
          displayCharacter(i);
          delay(100);
        }
      }
    }
    // Jika data yang diterima adalah 4
    else if (Slavereceived == 4) {
      // Menampilkan angka dari 0 hingga 5 pada digit kedua
      for (int i = 0; i <= 9; i++) {
        if (i <= 5) {
          digitalWrite(dg1, LOW);
          digitalWrite(dg2, HIGH);
          displayCharacter(i);
          delay(100);
        } else {
          // Menampilkan angka dari 6 hingga 9 pada digit pertama
          digitalWrite(dg2, LOW);
          digitalWrite(dg1, HIGH);
          displayCharacter(i);
          delay(100);
        }
      }
    }
    // Jika data yang diterima bukan 3 atau 4
    else {
      // Menampilkan angka dari 0 hingga 9 pada digit kedua
      for (int i = 0; i <= 9; i++) {
        if (i <= 5) {
          digitalWrite(dg1, LOW);
          digitalWrite(dg2, HIGH);
          displayCharacter(i);
          delay(100);
        } else {
          // Menampilkan angka dari 6 hingga 9 pada digit pertama
          digitalWrite(dg2, LOW);
          digitalWrite(dg1, HIGH);
          displayCharacter(i);
          delay(100);
        }
      }
    }
    received = false; // Reset flag received setelah pemrosesan data
  }
}
b. Flowchart
5. Kondisi [Kembali]Kondisi  : Percobaan 2 Kondisi 3
Jika 3 Switch aktif maka counting 0 - 5 pada digit 1 dan 6 - 9 pada digit 2, Jika 4 Switch aktif maka counting 0 - 5 pada digit 2 dan 6 - 9 pada digit 1
Download Simulasi Rangkaian Klik disini
Download HTML Klik disini
Download Video Simulasi Klik disini
Download Datasheet ARDUINO UNO klik disini
Download Datasheet Dipswitch  klik disini









 
Komentar
Posting Komentar