KOMUNIKASI
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.
2. Hardware dan Diagram Blok
[Kembali]
a. Hardware
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Prinsip Kerja
4. Flowcharth dan Listing Program [Kembali]
1) MASTER
Tugas utama Arduino master adalah memantau status tombol yang terhubung, mengidentifikasi tombol mana yang sedang aktif, dan mengirimkan informasi tersebut ke Arduino slave melalui koneksi SPI. Setiap kali dalam iterasi loop, Arduino master membaca status tombol dan menyimpan nilai tombol yang aktif dalam variabel `digit'. Setelah itu, nilai `digit' dikirimkan ke Arduino slave melalui koneksi SPI. Arduino master menunggu untuk jangka waktu k sebelum mengulangi proses tersebut.
Arduino master berfungsi sebagai pengendali utama yang terus-menerus memeriksa kondisi tombol. Saat sebuah tombol ditekan, Arduino master secara cepat dan efisien mendeteksinya dan mengirimkan informasi tentang tombol mana yang aktif ke Arduino slave melalui SPI. Proses ini dilakukan secara berulang dengan interval yang ditentukan, sehingga memastikan respons yang cepat dan konsisten terhadap perubahan status tombol.
2) SLAVE
Arduino slave bertugas menerima pesan dari Arduino master dan menampilkan informasi pada sebuah display segment. Kode slave ini didesain untuk menerima data melalui komunikasi Serial Peripheral Interface (SPI) dan menampilkan informasi tersebut pada display segment. Setelah melakukan inisialisasi pin dan komunikasi serial, kode mengaktifkan SPI dan menyiapkan fungsi interrupt untuk menangani data masuk. Ketika data diterima, fungsi interrupt memprosesnya dan menyalakan segmen yang sesuai pada display. Selanjutnya, dalam loop utama, kode memeriksa apakah ada data yang diterima. Jika ada, karakter tersebut diinterpretasikan ke dalam pola segmen yang sesuai dan ditampilkan pada display. Proses ini terus berulang secara kontinu.
Arduino slave berperan sebagai perangkat yang responsif dan interaktif, menerima instruksi dari Arduino master melalui SPI dan menampilkan informasi dengan jelas dan efektif pada display segment. Dengan penggunaan fungsi interrupt, Arduino slave dapat dengan cepat menanggapi data masuk tanpa mengganggu proses utama yang sedang berjalan, sehingga memberikan pengalaman pengguna yang mulus dan responsif.
a. Flowcharth
b. Listing Program
Master:
```cpp
#include <SPI.h>
// Array of pins for dip switches
int dipSwitchPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
int dipSwitchValues[8] = {}; // Array to store dip switch values
byte previousMasterSend = 255; // Initialize to a value that won't be a valid count
void setup() {
Serial.begin(9600); // Begin serial communication
// Set all dip switch pins as input with pull-up resistors enabled
for (int i = 0; i < 8; i++) {
pinMode(dipSwitchPins[i], INPUT_PULLUP);
}
SPI.begin(); // Initialize SPI communication
SPI.setClockDivider(SPI_CLOCK_DIV8); // Set SPI clock divider
digitalWrite(SS, HIGH); // Set Slave Select pin to HIGH
}
void loop() {
byte masterSend = 0; // Variable to store count of active dip switches
int activeSwitchCount = 0; // Variable to count active dip switches
// Read status of dip switches
for (int i = 0; i < 8; i++) {
dipSwitchValues[i] = digitalRead(dipSwitchPins[i]);
if (dipSwitchValues[i] == LOW) {
activeSwitchCount++; // Increment count if switch is active
}
}
masterSend = activeSwitchCount; // Assign count to variable to be sent to master
// Check if count has changed since last transmission
if (masterSend != previousMasterSend) {
digitalWrite(SS, LOW); // Set Slave Select pin to LOW to begin SPI communication
SPI.transfer(masterSend); // Send count to master
previousMasterSend = masterSend; // Update previous count
Serial.println(masterSend); // Print count to serial monitor
}
delay(1000); // Delay before next iteration
}
```
SLAVE:
```cpp
#include <SPI.h>
// Array of pins for the display segments
const int segmentPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
volatile boolean dataReceived = false; // Flag to indicate data reception
volatile byte previousSlaveReceived = 255; // Initialize to a value that won't be a valid character
void setup() {
Serial.begin(9600); // Begin serial communication
// Set all segment pins as output
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
// Enable SPI and attach interrupt
SPCR |= _BV(SPE); // Enable SPI
SPI.attachInterrupt(); // Attach interrupt for SPI communication
}
// Interrupt service routine for SPI communication
ISR (SPI_STC_vect) {
byte slaveReceived = SPDR; // Read received data from SPI data register
if (slaveReceived != previousSlaveReceived) {
dataReceived = true; // Set flag to indicate data reception
previousSlaveReceived = slaveReceived; // Update previous received data
}
}
void loop() {
// Check if new data has been received
if (dataReceived) {
displayCharacter(previousSlaveReceived); // Display the received character
delay(1000); // Delay for 1 second
dataReceived = false; // Reset flag after displaying character
}
}
// Function to display character on segment display
void displayCharacter(int ch) {
// Define patterns for each digit
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
};
// Check if the character is within the valid range
if (ch >= 0 && ch <= 8) {
int index = ch; // Get the digit index (0-9) from the character
// Write the pattern to the segment pins
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], patterns[index][i]);
}
}
}
```
5. Kondisi
[Kembali]
Percobaan 2 Kondisi 5
Setiap 1 Switch aktif muncul angka sesuai jumlah switch yang aktif pada digit 1
6. Video Simulasi
[Kembali]
HTML klik disini
Simulasi klik disini
Gambar Simulasi klik disini
Video Simulasi klik disini
Listing Program klik disini
Datasheet Arduino klik disini