Program Kodları
//__________________MASTER__________________
//SPI iletişim yöntemi ile master Arduino'dan Slave Arduino'ya
//veri gönderilir.
#include<SPI.h>
void setup()
{
SPI.begin(); //SPI iletişim başlatıldı
SPI.setClockDivider(SPI_CLOCK_DIV4); //clock bölme 4 yapıldı.
}
void loop()
{
digitalWrite(SS,LOW); //slave seçme biti LOW yapılarak slave cihaz ile iletişim başladı.
SPI.transfer(78); //slave cihaza veri gönderildi.
delay(1000);
SPI.transfer(70);
delay(1000);
digitalWrite(SS,HIGH); //slave seçme biti HIGH yapılarak slave cihaz ile iletişim kapatıldı.
}
//__________________SLAVE__________________
//SPI iletişim yöntemi ile master Arduino'dan Slave Arduino'ya
//veri gönderilir.SPI kütüphanesi, Arduino'nun her zaman master konumunda olacağı düşünülerek
//hazırlandığı için Arduino'yu slave mode almak için kayıtçılarda bazı değişiklikler yapıldı.
#include<SPI.h>
int gelen;
void setup()
{
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
SPCR = (1 << SPE) | (0 << MSTR); //SPE=1 ile SPI iletişim etkinleştirildi.
//MSTR=0 ile Arduino slave moda alındı.
SPI.attachInterrupt(); //SPI kesmesi aktif edildi. Kesmeyi aktif
//etmek için SPCR kayıtçısnın 7. biti olan
//SPIE=1 yapılarak da SPI kesmesi aktif edilebilir.
}
void loop()
{
if (gelen == 78)
{
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
}
else
{
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
}
}
//slave Arduino'ya veri geldiğinde çalışan kesme fonksiyonu
ISR(SPI_STC_vect)
{
gelen = SPDR; //slave cihaza gelen veri SPDR kayıtçısına kaydedilir.
//Buradaki veri gelen değişkenine atandı.
}
Devre Şeması
0 comments:
Yorum Gönder