Modul 3 Percobaan 2 Kondisi 10 (SPI)
Ganti LED menjadi Buzzer
2. Gambar Rangkaian Simulasi
[Kembali]
4. Prinsip Kerja Rangkaian [Kembali]
Listing Program :
//MASTER
#include<SPI.h>
#define LED 7
#define ipbutton 2
int buttonvalue;
int x;
void setup (void)
{
Serial.begin(115200); //Starts Serial Communication at Baud Rate 115200
pinMode(ipbutton,INPUT); //Sets pin 2 as input
pinMode(LED,OUTPUT); //Sets pin 7 as Output
SPI.begin(); //Begins the SPI commnuication
SPI.setClockDivider(SPI_CLOCK_DIV8);//Sets clock for SPI communication at 8
digitalWrite(SS,HIGH);//Setting SlaveSelect as HIGH
}
void loop(void)
{
byte Mastersend,Mastereceive;
buttonvalue = digitalRead(ipbutton); //Reads the status of the pin 2
if(buttonvalue == HIGH)//Logic for Setting x value depending upon input from pin 2
{
x = 1;
}
else
{
x = 0;
}
digitalWrite(SS, LOW);//Starts communication with Slave connected to master
Mastersend = x;
Mastereceive=SPI.transfer(Mastersend);
if(Mastereceive == 1)
digitalWrite(LED,HIGH); //Sets pin 7 HIGH
Serial.println("Master LED ON");
}
else
{
digitalWrite(LED,LOW);
Serial.println("Master LED OFF");
delay (100);
}
}
Untuk prinsip kerja dari master yaitu pertama tama include library untuk SPI, lalu deklarasikan pin 7 dan pin 2 masing masing untuk LED dan button, selanjutnya ada variable buttonvalue dan x dengan tipe data integer. Lalu ada fungsi void setup dimana pada fungsi ini semua kode akan dieksekusi sekali, lalu ada Serial.begin (115200) digunakan untuk mengatur kecepatan pengiriman data menggunakan port serial. Dalam fungsi void setup ini kita akan menetapkan atau mendeklarasikan pin 2(button) sebagai input dan pin 7(LED) sebagai output. Lalu untuk memulai komunikasi SPI kita perlu menuliskan syntaks SPI.begin dan selanjutnya kita mengatur clockdivider untuk komunikasi SPI, disini kita menggunakan pembagi 8. Lalu kita mengatur SS (slave select) dalam logika HIGH sehingga master tidak akan terhubung dengan slave.
//SLAVE
#include <SPI.h>
#define LEDpin 7
#define buttonpin 2
volatile boolean received;
volatile byte Slavereceived,Slavesend;
int buttonvalue;
int x;
void setup()
{
Serial.begin(115200);
pinMode(buttonpin,INPUT); // Setting pin 2 as INPUT
pinMode(LEDpin,OUTPUT); // Setting pin 7 as OUTPUT
pinMode(MISO,OUTPUT);//Sets MISO as OUTPUT (Have to Send data to Master IN)
SPCR |= _BV(SPE); //Turn on SPI in Slave Mode
received = false;
SPI.attachInterrupt(); //Interuupt ON is set for SPI commnucation
}
ISR (SPI_STC_vect) //Inerrrput routine function
{
Slavereceived = SPDR;
received = true; //Sets received as True
}
void loop()
{
if(received) //Logic to SET LED ON OR OFF
{
if (Slavereceived==1)
{
digitalWrite(LEDpin,HIGH); //Sets pin 7 as HIGH LED ON
Serial.println("Slave LED ON");
}
else
{
digitalWrite(LEDpin,LOW); //Sets pin 7 as LOW LED OFF
Serial.println("Slave LED OFF");
}
buttonvalue = digitalRead(buttonpin); // Reads the status of the pin 2
if (buttonvalue == HIGH) //Logic to set the value of x to send to master
{
x=1;
}
else
{
x=0;
}
Slavesend=x;
SPDR = Slavesend; //Sends the x value to master via SPDR
delay(100) ;
}
}
Prinsip kerja dari master yaitu pertama include library untuk SPI, lalu deklarasikan pin 7 dan pin 2 masing masing untuk LED dan button, selanjutnya ada variable buttonvalue dan x dengan tipe data integer. Lalu ada fungsi void setup dimana pada fungsi ini semua kode akan dieksekusi sekali, lalu ada Serial.begin (115200) digunakan untuk mengatur kecepatan pengiriman data menggunakan port serial. Dalam fungsi void setup ini kita akan menetapkan atau mendeklarasikan pin 2(button) sebagai input dan pin 7(LED) sebagai output dan syntaks yang paling penting yaitu mengatur MISO sebagai output karena disini kita akan mengirim data dari slave ke master. Selanjutnya nyalakan SPI dalam mode slave menggunakan SPI control register. Kemudian aktifkan interupsi untuk komunikasi SPI, jika data diterima dari master maka interrupt routine akan dipanggil dan data akan diambil dari SPDR dan disimpan dalam variable slavereceive
Tidak ada komentar:
Posting Komentar