Tugas Pendahuluan 2 Modul 3




1. Kondisi
[Kembali]
*PERCOBAAN  2 KONDISI 15*
Ubah Button menjadi Saklar SPDT

2. Gambar Rangkaian Simulasi [Kembali]


3. Video Simulasi [Kembali]


4. Prinsip Kerja [Kembali]
Pada percobaan ini kita menggunakan beberapa komponen yaitu ada 2 buah arduino (master dan slave), ada 4 buah resistor, 2 buah led, 2buah SPDT, 2 buah VCC(dc generator) dan 2 buah ground. Pada rangkaian ini, pin 13, 12, 11, dan 10 arduino master masing masing dihubungkan dengan pin yang sama pada arduino slave. Dimana pin 13 ini adalah clk, pin 12 adalah MISO (master input slave output), pin 11 adalah MOSI (master output slave input) dan pin 10 adalah SS (slave select) digunakan untuk memilih slave mana yang akan dikirimkan data oleh master.  Lalu pin 7 master dihubungkan dengan resistor 1 dan LED 1, selanjutnya pin 2 dihubungkan dengan button dan resistor 2, dimana pin 2 ini digunakan sebagai input yang nantinya data yang masuk ke pin 2 yang berasal dari button akan dikirimkan ke arduino slave dan arduino slave akan mendeteksi dan mengerjakan perintah sesuai dengan program yang diinput pada slave. Begitu juga dengan pin 7 slave dihubungkan dengan resistor 3 dan LED 2, selanjutnya pin 2 dihubungkan dengan button dan resistor 4, dimana pin 2 ini digunakan sebagai input yang nantinya data yang masuk ke pin 2 ini akan dikirimkan ke arduino master dan arduino master akan mendeteksi dan mengerjakan perintah sesuai dengan program yang diinput pada master
LISTING PROGRAM MASTER
#include<SPI.h>                             //Library for SPI 
#define LEDku 7
#define spdtku 2

int spdtvalue;
int x;

void setup (void)
{
  Serial.begin(115200);                   //Starts Serial Communication at Baud Rate 115200
  pinMode(spdtku, INPUT);               //Sets ipbutton sebagai input
  pinMode(LEDku, OUTPUT);                   //Sets led sebagai 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;
  spdtvalue = digitalRead(spdtku);   //Reads the status of the pin 2
  if (spdtvalue == 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(LEDku, HIGH);             //Sets pin 7 HIGH
    Serial.println("Master LED ON");
  }
  else
  {
    digitalWrite(LEDku, LOW);              //Sets pin 7 LOW
    Serial.println("Master LED OFF");
  }
  delay(100);
}

Prinsip kerja dari master yaitu pertama tama include library untuk SPI, lalu deklarasikan pin 7 dan pin 2 masing masing untuk LED dan button, selanjutnya ada variable spdtvalue dan x dengan tipe data integer. Lalu ada fungsi void setup dimana pada fungsi ini semua kode akan dieksekusi sekali, lalu ada Serial.begin (115200) digunakan untuk mengatur kecepatan pengiriman data menggunakan port serial. Dalam fungsi void setup ini kita akan menetapkan atau mendeklarasikan pin 2(SPDT) sebagai input dan pin 7(LED) sebagai output. Lalu untuk memulai komunikasi SPI  kita perlu menuliskan syntaks SPI.begin dan selanjutnya kita mengatur clockdivider untuk komunikasi SPI, disini kita menggunakan pembagi 8. Lalu kita mengatur SS (slave select) dalam logika HIGH sehingga master tidak akan terhubung dengan slave.

Selanjutnya ada fungsi void loop dimana pada fungsi ini semua kode akan dijalankan secara berulang, lalu dalam fungsi ini terdapat spdtvalue yang mana spdt akan membaca nilai yang terdapat pada pin 2. Lalu jika button mendeteksi nilai logika high maka x = 1 sedangkan jika terdeteksi nilai selain high maka nilai x = 0, selanjutnya untuk memulai komunikasi antara slave dan master kita perlu menuliskan syntaks digitalWrite (SS, LOW), Lalu ada syntaks Mastereceive =SPI.transfer(Mastersend) yang mana syntaks ini berguna untuk mengirimkan nilai SPDT yang disimpan dalam variable Mastersend ke slave arduino dan juga menerima nilai dari slave dan disimpan dalam variable Mastereceive. Selanjutnya kita akan mengatur  LED dalam kondisi hidup atau mati. pada program ini jika mastereceive nilai nya 1 maka led akan menyala sedangkan jika mastereceive mendeteksi nilai selain 1 maka led tidak akan menyala.

LISTING PROGRAM SLAVE
#include<SPI.h>
#define LEDku 7
#define spdtku 2

volatile boolean received;
volatile byte Slavereceived, Slavesend;
int spdtvalue;
int x;
void setup()

{
  Serial.begin(115200);
  pinMode(spdtku, INPUT);              // Setting pin 2 as INPUT
  pinMode(LEDku, 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(LEDku, HIGH);        //Sets pin 7 as HIGH LED ON
      Serial.println("Slave LED ON");
    }
    else
    {
      digitalWrite(LEDku, LOW);         //Sets pin 7 as LOW LED OFF
      Serial.println("Slave LED OFF");
    }

    buttonvalue = digitalRead(spdtku);  // Reads the status of the pin 2

    if (spdtvalue == 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);
  }
}
Untuk prinsip kerja dari slave yaitu pertama tama include library untuk SPI, lalu deklarasikan pin 7 dan pin 2 masing masing untuk LED dan button, selanjutnya ada selanjutnya ada variable spdtvalue dan x dengan tipe data integer. Lalu ada fungsi void setup dimana pada fungsi ini semua kode akan dieksekusi sekali, lalu ada Serial.begin (115200) digunakan untuk mengatur kecepatan pengiriman data menggunakan port serial. Dalam fungsi void setup ini kita akan menetapkan atau mendeklarasikan pin 2(button) sebagai input dan pin 7(LED) sebagai output  dan syntaks yang paling penting yaitu mengatur MISO sebagai output karena disini kita akan mengirim data dari slave ke master. Selanjutnya nyalakan SPI dalam mode slave menggunakan SPI control register. Kemudian aktifkan interupsi untuk komunikasi SPI, jika data diterima dari master maka interrupt routine akan dipanggil dan data akan diambil dari SPDR dan disimpan dalam variable slavereceive

Selanjutnya ada fungsi void loop dimana pada fungsi ini semua kode akan dijalankan secara berulang, lalu dalam fungsi ini kita akan mengatur led dalam kondisi hidup atau mati tergantung nilai yang diterima pada slave. Jika nilai yang diterima pada slave = 1 maka led akan menyala  sedangkan jika nilai yang diterima selain 1 maka led akan mati. Selanjutnya button akan membaca nilai yang terdapat pada pin 2. Lalu jika button mendeteksi nilai logika high maka x = 1 sedangkan jika terdeteksi nilai selain high maka nilai x =0. Nilai x ini akan dikirimkan oleh slave ke master melalui spdr.

5. Link Download [Kembali]

No comments:

Post a Comment