1. Rangkai semua komponen
2. Buat program di aplikasi arduino IDE
3. Setelah selesai masukkan program ke arduino
4. Jalankan program pada simulasi dan cobakan dengan modul
5. Selesai
2. Hardware dan Diagram Blok
[Kembali]
Hardware :
Arduino Uno
Diagram Blok :
Rangkaian Simulasi :
Prinsip Kerja :
Pada praktikum menggunakan 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).
4. Flowchart dan Listing Program [Kembali]
Flowchart :
Master
Slave
Listing Program :
Master
#include <SPI.h>int dip[] = {2, 3, 4, 5, 6, 7, 8, 9};int dipvalue[] = {};int dipCount = 0;void setup() {Serial.begin(9600);for (int i = 0; i < 8; i++) {pinMode(dip[i], INPUT_PULLUP);}SPI.begin();SPI.setClockDivider(SPI_CLOCK_DIV8);digitalWrite(SS, HIGH);}void loop() {byte Mastersend = 0;for (int i = 0; i < 8; i++) {dipvalue[i] = digitalRead(dip[i]);if (dipvalue[i] == LOW) {dipCount++;}}if (dipCount % 2 == 0) {Mastersend = dipCount / 2; // Membagi jumlah dip switch yang aktif menjadi 2} else if (dipCount % 3 == 0) {Mastersend = dipCount / 3; // Membagi jumlah dip switch yang aktif menjadi 3}dipCount = 0;digitalWrite(SS, LOW);SPI.transfer(Mastersend);delay(100);}
Slave#include <SPI.h>
#define a 9
#define b 8
#define c 7
#define d 6
#define e 5
#define f 4
#define g 3
#define dp 2
#define D1 A1
#define D2 A3
const int segmentPins[] = {a, b, c, d, e, f, g};
volatile boolean received = false;
volatile byte Slavereceived;
void setup() {
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
Serial.begin(9600);
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
SPCR |= _BV(SPE);
SPI.attachInterrupt();
}
ISR(SPI_STC_vect) {
Slavereceived = SPDR;
received = true;
}
void displayCharacter(int digit, int digitPosition) {
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
// patterns untuk angka 2, 3, ..., 9
};
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], patterns[digit][i]);
}
if (digitPosition == D1) {
digitalWrite(D1, HIGH);
digitalWrite(D2, LOW);
} else if (digitPosition == D2) {
digitalWrite(D1, LOW);
digitalWrite(D2, HIGH);
}
delay(50);
}
void loop() {
if (received) {
if (Slavereceived == 1) {
displayCharacter(8, D1);
displayCharacter(0, D2);
} else if (Slavereceived == 2) { // Menampilkan angka 2 jika diterima dari master
displayCharacter(2, D1);
displayCharacter(0, D2);
} else if (Slavereceived == 3) { // Menampilkan angka 3 jika diterima dari master
displayCharacter(0, D1);
displayCharacter(3, D2);
} else if (Slavereceived == 4) {
displayCharacter(4, D1);
displayCharacter(4, D2);
}
delay(100);
received = false;
}
}
Percobaan 2 (Komunikasi SPI Menggunakan Arduino - sesuai rangkaian modul) er
6. Video Simulasi
[Kembali]
HTML 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