1. Kondisi [ K E M B A L I]
Kondisi yang digunakan pada Tugas Pendahuluan ini adalah Percobaan 2 kondisi 10 yaitu Ganti LED menjadi Buzzer
2. Rangkaian Simulasi [ K E M B A L I]
3. Flowchart [ K E M B A L I]
4. Listing Program [ K E M B A L I]
MASTER
//MASTER
#include <SPI.h> //Deklarasi library SPI
#define button 2//mendefinisikan variable button pada pin 2
char data = "1"; //mendeklarasikan variable data yang berisikan karakter "1"
void setup (void) {//fungsi setup hanya dijalankan sekali
pinMode(button, INPUT_PULLUP); //mendeklarasikan button sebagai input dengan rangkaian pull up
Serial.begin(115200); //untuk memulai komunikasi serial dengan Set baud rate 115200 untuk USART dan SPI
digitalWrite(SS, HIGH); // mematikan Slave Select dengan memberikan logika HIGH
SPI.begin (); // untuk memulai komunikasi SPI
SPI.setClockDivider(SPI_CLOCK_DIV8); //divide the clock by 8
}
void loop (void) {//fungsi loop dijalankan berulang
char c; // menginisialisasikan variabel C dengan tipe data char
int nilai = digitalRead(button);
if (nilai == 0) { //pembacaan variable nilai, logika 0 berarti button ditekan
digitalWrite(SS, LOW); // menghidupkan Slave Select dengan memberikan logika LOW
// send test string
for (const char * p = "1" ; c = *p; p++)//perulangan for untuk mengirimkan variable p dengan isi "1", C diisi dengan variable alamat P dan ditransfer ke slave secara satu persatu karakter
{
SPI.transfer (c);
Serial.print(c); // sebagai penghubung serial monitornya
}
SPI.transfer("1");
digitalWrite(SS, HIGH); // disable Slave Select memberi logika HIGH
delay(2000);
}
}
SLAVE
//SLAVE
#include <SPI.h> //Deklarasi library SPI
#define buzzer 2 //menginisialisasikan variable buzzer pada pin 2
char buff [50]; // untuk menginisialisasikan variabel buff dg isi array 50
volatile byte indx;
volatile boolean process;
void setup (void) {
Serial.begin (115200);// serial begin antara master dan slave harus sama
pinMode(buzzer, OUTPUT); //memberi peran output pada buzzer (pin 2)
SPCR |= _BV(SPE); // Menghidupkan komunikasi SPI untuk slave
indx = 0; // buffer empty
process = false;
SPI.attachInterrupt(); // memulai pembacaan
}
ISR (SPI_STC_vect) // fungsi yg dijalankan ketika ada data yang masuk
{
byte c = SPDR; // Membaca variable C dari Data Register dari slave
if (indx < sizeof buff) { //jika indx kecil dari buff
buff [indx++] = c; // Maka data disimpan pada indx selanjutnya dalam array buff
}
if (c == '1') { //ketika pembacaan variable c telah mencapai karakter 1, maka process=true
process = true;
}
}
void loop (void) {
if (process) {//ketika process=true, program jalan
digitalWrite(buzzer, HIGH);
process = false; //untuk menghentikan process
Serial.println (buff); //menampilkan pembacaan
indx = 0; //reset button to zero
delay(1000);
}
else //ketika process=false
{
digitalWrite(buzzer, LOW);
}
}
5. Video [ K E M B A L I]
6. Link Download [ K E M B A L I]
a. Video
Tidak ada komentar:
Posting Komentar