Modul 3 Percobaan 2 Kondisi 4
Ubah boud rate pada Slave menjadi 34500
2. Gambar Rangkaian Simulasi
[Kembali]
3. Video Simulasi
[Kembali]
4. Prinsip Kerja Rangkaian
[Kembali]
Pada rangkaian digunakan 2 Arduino uno, push button, resistor, dan LED. Pin 2 master dan slave dihubungkan ke push button dan pin 7 master dan slave dihubungkan ke LED.
listing program
//MASTER
#include<SPI.h> //Library for SPI
#define m_LED 7
#define m_button 2
int buttonvalue;
int x;
void setup ()
{
Serial.begin(115200);
pinMode(m_button,INPUT); //Sets pin 2 as input
pinMode(m_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(m_button); //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(m_LED,HIGH);
delay(500);
digitalWrite(m_LED,LOW);
Serial.println("Master LED ON");
}
else
{
digitalWrite(m_LED,LOW); //Sets pin 7 LOW
Serial.println("Master LED OFF");
}
delay(100);
}
//SLAVE
#include<SPI.h>
#define s_LED 7
#define s_button 2
volatile boolean received;
volatile byte Slavereceived,Slavesend;
int buttonvalue;
int x;
void setup()
{
Serial.begin(34500);
pinMode(s_button,INPUT); // Setting pin 2 as INPUT
pinMode(s_LED,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(s_LED,HIGH);
delay(500);
digitalWrite(s_LED, LOW);//Sets pin 7 as HIGH LED ON
Serial.println("Slave LED ON");
}else
{
digitalWrite(s_LED,LOW); //Sets pin 7 as LOW LED OFF
Serial.println("Slave LED OFF");
}
buttonvalue = digitalRead(s_button); // 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, dimasukkan libarry untuk SPI, dideklarasikan pin yang akan digunakan 2 untuk push button, 7 untuk LED. Pada void setup, push button diatur menjadi input dan LED sebagai output. Serial.begin(115200); digunakan untuk menset baud rate menjadi 115200. SPI.begin();digunakan untuk memulai komunikasi SPI. Pada void loop, nilai push button akan dibaca, jika button HIGH x = 0, selain itu x = 1. Fungsi SPI.transfer(); berfungsi untuk mengirim nilai dan menerima nilai slave. Jika x = 1, LED akan HIGH, delay 500ms, lalu LED akan LOW, selain x = 1, LED akan LOW.
Pada program Slave, dimasukkan libarry untuk SPI, dideklarasikan pin yang akan digunakan 2 untuk push button, 7 untuk LED. Pada void setup, push button diatur menjadi input, LED dan MISO sebagai output. Serial.begin(34500); digunakan untuk menset baud rate menjadi 34500. SPCR |= _BV(SPE);digunakan untuk slave mode. Pada void loop, if(received) berfungsi untuk menset LED on atau off tergantung nilai yang diterima dari master. Push button akan dibaca, jika button HIGH x = 0, selain itu x = 1. Fungsi SPI.transfer(); berfungsi untuk mengirim nilai dan menerima nilai slave. Jika x = 1, LED akan HIGH, delay 500ms, lalu LED akan LOW, selain x = 1, LED akan LOW.
Ketika push button pada master ditekan, maka LED pada slave akan menyala, sebaliknya jika push button pada slave ditekan, LED pada master akan menyala. Dikarena kan baud rate master 115200 dan baud rate slave 34500, berbeda kecepatan pengiriman maupun penerimaan data, maka saar mengirim maupun menerima, data ada yang tertinggal, sehingga LED tidak menyala jika push button hanya ditekan sekali, jika ditekan berkali-kali maka data yang dikirimkan banyak, sehingga LED dapat menyala.
5. Link Download
[Kembali]
Link rangkaian [klik]
Link Html [klik]
Link Video [klik]
Tidak ada komentar:
Posting Komentar