TP 2 M3

      1. Arduino Uno

      2. Seven Segment

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

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

3. Rangkaian Simulasi dan Prinsip Kerja  [Kembali]
                                Rangkaian Simulasi.

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:

  1. Program dijalankan pada Arduino master.
  2. Program membaca status DIP switch dan menghitung jumlah switch yang aktif.
  3. Program menentukan kondisi yang sesuai berdasarkan jumlah switch yang aktif.
  4. Program mengirimkan perintah ke Arduino slave berdasarkan kondisi yang ditentukan.
  5. Arduino slave menerima perintah dari Arduino master.
  6. 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]


a. Listing Program 

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

6. Video Simulasi [Kembali]




7. FILE Download [Kembali]
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
Download Datasheet LED klik disini
Download Listing Program Master klik disini
Download Listing Program Slave klik disini




















Komentar

Postingan populer dari blog ini