Tugas Pendahuluan 2
"Percobaan 2 Kondisi 6"
- Tambahkan resistor sebelum LED sebesar 1k Ohm
Saat Button LOW
3. Listing Program [Kembali]
// MASTER PROGRAM
#include<SPI.h> //Library for SPI
#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 (16/8=2Mhz)
digitalWrite(SS,HIGH); // Setting SlaveSelect as HIGH (So master doesnt connnect with slave)
}
void loop(void)
{
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");
}
else
{
digitalWrite(LED,LOW); //Sets pin 7 LOW
Serial.println("Master LED OFF");
}
delay (100);
}
// 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);
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);
}
}
4. Video Simulasi
[Kembali]
- Video Simulasi Percobaan 2 Kondisi 6
4. Prinsip Kerja Rangkaian [Kembali]
- Prinsip Kerja Rangkaian Percobaan 2 Kondisi 6
Pada Percobaan 2 Kondisi 6 yaitu Arduino 1 ditentukan sebagai master dan arduino 2 yang bertindak sebagai slave. Master dan slave ini dihubungkan melalui kaki pin 10 master ke kaki pin 10 slave sebagai SS, pin 11 master ke kaki pin 11 slave sebagai MOSI, pin 12 master ke kaki pin 12 slave sebagai MISO, dan pin 13 master ke kaki pin 13 slave sebagai SCK. pin 2 (push button) sebagai input dan pin 7 sebagai output pada masing masing arduino. Ketika input button berlogika HIGH maka akan ada keluaran di pin MOSI ke slave sehingga LED pada slave menyala. sedangkan ketika input button pada slave logika HIGH maka akan ada keluaran di pin MISO akibatnya LED pada Master menyala.
5. Link Download [Kembali]
File HTML [download]
File Library Arduino Uno V.2 [download]
File Datasheet Arduino Uno [download]
File Datasheet Resistor [download]
File Datasheet LED [download]
File Gambar Rangkaian [download]
File Video Rangkaian [download]
File Rangkaian Percobaan 2 Kondisi 6 [download]
File Program Percobaan 2 Kondisi 6 [download]