TP M3

 


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

Tidak ada komentar:

Posting Komentar