Tugas Pendahuluan 2 Modul 3
( Percobaan 2 Kondisi 2 )
1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
2. Hardware dan Diagram Blok
[Kembali]
Hardware :
1.Arduino Uno
2.Dipswitch
3.Seven Segment 2 Digit
4.Resistor
Diagram Blok :
Rangkaian Simulasi :
Prinsip Kerja :
Pada percobaan 2 kondisi 2, terdapat dua Arduino Uno yang digunakan, dimana satu Arduino bertindak sebagai master dan satunya lagi sebagai slave. Arduino master terhubung ke bagian input, yaitu dipswitch . Sedangkan, Arduino slave terhubung ke bagian output, di mana terdapat 7-Segment 2digit. Arduino Master bertindak sebagai arduino yang akan memberikan commando/perintah yang berasal dari inputannya ke arduino slave. sedangkan arduino slave bertindak sebagai penerima/ yang menjalankan commando tersebut dalam bentuk output. Pada rangkaian ini, Arduino saling berkomunikasi menggunakan sistem SPI, dimana pin 10-13 arduino master terhubung ke pin 10-13 arduino slave.
Ketika salah satu switch pada dipswtich aktif, maka output yang dihasilkan berupa angka 1 digit pada seven segment 2 digit (hanyua 1 digit yang aktif). Sedangkan pada saat switch yang aktif pada dipswitch berjumlah 4, maka seven segment akan menampilkam angka 2 digit (kedua digit seven segment aktif)
4. Flowchart dan Listing Program [Kembali]
Flowchart :
Master
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 == 1) {
Mastersend = 1; // Jika hanya satu dip switch yang aktif, kirim 1
} else if (dipCount == 4) {
Mastersend = 4; // Jika empat dip switch yang aktif, kirim 4
}
dipCount = 0; // Mereset jumlah dip switch yang aktif untuk iterasi berikutnya
// Mengirim nilai Mastersend ke slave melalui SPI
digitalWrite(SS, LOW); // Mengaktifkan slave dengan mengatur SS ke LOW
SPI.transfer(Mastersend); // Mengirim data ke slave
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
...
};
// 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 == 1) {
displayCharacter(8, D1); // Menampilkan angka 8 hanya pada digit 1.
displayCharacter(0, D2); // Menampilkan angka 0 pada digit 2 (Matikan digit 2).
} else if (Slavereceived == 4) {
displayCharacter(4, D1); // Menampilkan angka 4 pada digit 1.
displayCharacter(4, D2); // Menampilkan angka 4 pada digit 2.
}
delay(100); // Memberikan delay sebelum menerima data berikutnya.
received = false; // Mereset status penerimaan data.
}
}
Percobaan 2 Kondisi 2
(Setiap 1 Switch aktif muncul angka berbeda pada digit ke 1, Setiap 4 Switch aktif muncul angka pada kedua digit)
6. Video Simulasi [Kembali]
HTML klik disini
File Rangkaian klik disini
Video Percobaan klik disini
Video Percobaan klik disini
Listing Program klik disini
Datasheet Arduino klik disini
Datasheet Dipswitch klik disini
Datasheet 7 Segment klik disini
Tidak ada komentar:
Posting Komentar