Tugas Pendahuluan (Percobaan 2 Kondisi 6)
Modul 3
Percobaan 2 Kondisi 6
Tambahkan resistor sebelum LED sebesar 1k ohm2. Rangkaian Simulasi[Kembali]
Listing Program
//MASTER
#include<SPI.h> //Library for SPI
#define LED 7
#define ipbutton 2
int buttonvalue;
int x;
void setup ()
{
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 (16/8=2Mhz)
digitalWrite(SS,HIGH); // Setting SlaveSelect as HIGH (So master doesnt connnect with slave)
}
void loop()
{
byte Mastersend,Mastereceive;
buttonvalue = digitalRead(ipbutton); //Reads the status of the pin 2
if(buttonvalue == HIGH) //Logic for Setting x value (To be sent to slave) 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); //Send the mastersend value to slave also receives value from slave
if(Mastereceive == 1) //Logic for setting the LED output depending upon value received from slave
{
digitalWrite(LED,HIGH);//Sets pin 7 HIGH
Serial.println("Master LED ON");
delay (100);
}
else
{
digitalWrite(LED,LOW); //Sets pin 7 LOW
Serial.println("Master LED OFF");
}
delay (100);
}
// 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; // Value received from master if store in variable slavereceived
received = true; //Sets received as True
}
void loop()
{ if(received) //Logic to SET LED ON OR OFF depending upon the value recerived from master
{
if (Slavereceived==1)
{
digitalWrite(LEDpin,HIGH);
Serial.println("Slave LED ON");
delay (250);
}
else
{
digitalWrite(LEDpin,LOW); //Sets pin 7 as LOW LED OFF
Serial.println("Slave LED OFF");
delay (100);
}
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);
}
}
Pada program master bagian headernya diisi dengan inisialisasi library SPI, LED dengan in 7, button dengan pin 2, variabel buttonvalue dan x. Pada bagian set up, kecepatan transfer data arduino diatur sebesar 115200 bps, pin 2 dan pin 7 diatur masing-masging sebagai input dan output, dan komunikasi SPI, clock SPI dan pin SelectSlave(bernilai HIGH) dideklarasikan dengan menggunakan fungsi SPI.begin(), SPI.setClockDivider, dan digitalWrite(SS,HIGH). Pada bagian loop terdiri dari sintaks yang melakukan pembacaan pin 2 kemudian membuat kondisi dimana jika pin 2 bernilai HIGH, variabel x bernilai 1 dan jika tida variabel x bernilai 0. Lalu pin selectslave akan diberi nilai LOW untuk menghubungkan slave dengan master. kemudian variabel x tadi akan dikirimkan ke slave melalui pin MISO sekaligus master menerima masukan dari slave . jika masukan dari slave bernilai HIGH, LED master akan hidup jika tidak LED master akan mati.
Pada program slave bagian headernya disi sama dengan program master dengan tambahan variabel received, Slavereceived,dan Slavesend. Pada bagian set up, kecepatan transfer data arduino diatur sebesar 115200 bps, pin 2 dan pin 7 diatur masing-masing sebagai input dan output, dan komunikasi SPI slave mode dan interupt on, nilai yang diterima dari master dideklarasikan. Pada bagian loop jika nilai yang diterima dari master adalah 1 maka pin LED slave akan hidup, jia tidak LED slave mati. kemudian nilai button slave akan dibaca dan nilai pembacaan button akan dikirimkan melalui pin MOSI kepada master dengan ketentuan jika nilai button slave adalah HIGH nilai x yang akan dikirimkan adalah 1 dan jika tidak x=0
Pada program slave bagian headernya disi sama dengan program master dengan tambahan variabel received, Slavereceived,dan Slavesend. Pada bagian set up, kecepatan transfer data arduino diatur sebesar 115200 bps, pin 2 dan pin 7 diatur masing-masing sebagai input dan output, dan komunikasi SPI slave mode dan interupt on, nilai yang diterima dari master dideklarasikan. Pada bagian loop jika nilai yang diterima dari master adalah 1 maka pin LED slave akan hidup, jia tidak LED slave mati. kemudian nilai button slave akan dibaca dan nilai pembacaan button akan dikirimkan melalui pin MOSI kepada master dengan ketentuan jika nilai button slave adalah HIGH nilai x yang akan dikirimkan adalah 1 dan jika tidak x=0
Tidak ada komentar:
Posting Komentar