Percobaan 2 kondisi 1 :
Buatlah kondisi awal LED mati lalu hidup berkedip dengan delay 500 ms
Prinsip Kerja Rangkaian
Pin 10,11,12,dan 13 pada arduino 1 (master) dihubungkan dengan pin 10,11,12,dan 13 pada arduino 2 (slave). pin 10 untuk SS, pin 11 MOSI, pin 12 MISO, dan pin 13 SCK. pin 2 (push button) sebagai input dan pin 7 sebagai output pada masing masing arduino. push button ditekan sehingga berlogika 1. ketika logika 1 di inputkan ke arduino1(master) maka akan ada keluaran di pin MOSI ke arduino2(slave). pada arduino2 data di proses sehingga ada keluaran HIGH di pin 2 arduino2 akibatnya LED menyala. sedangkan ketika logika 1 di inputkan ke arduino2 (Slave) maka akan ada keluaran di pin MISO ke arduino1(Master). pada arduino1 data di proses sehingga ada keluaran HIGH di pin 2 arduino2 akibatnya LED menyala.
4. Listing program [kembali]
#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);
delay(500);
digitalWrite(LED,LOW);
//Sets pin 7 HIGH
Serial.println("Master LED ON");
}
else
{
digitalWrite(LED,LOW); //Sets pin 7 LOW
Serial.println("Master LED OFF");
}
delay(250);
}
// SLAVE PROGRAM
#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);
delay(500);
digitalWrite(LEDpin, LOW);//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(250);
}
}
6. Link download [kembali]
rangkaian percobaan
Datasheet LED - Download
Datasheet Push Button - Download
Datasheet Arduino Uno - Download
Datasheet LED - Download
Datasheet Push Button - Download
Datasheet Arduino Uno - Download
Tidak ada komentar:
Posting Komentar