Tugas Pendahuluan 3




1. Kondisi   [ K E M B A L I]
Kondisi yang digunakan pada Tugas Pendahuluan ini adalah Percobaan 2 kondisi 10 yaitu Ganti LED menjadi Buzzer

2. Rangkaian Simulasi   [ K E M B A L I]
3. Flowchart   [ K E M B A L I]
4. Listing Program   [ K E M B A L I]
MASTER
//MASTER

#include <SPI.h> //Deklarasi library SPI
#define button 2//mendefinisikan variable button pada pin 2

char data = "1"; //mendeklarasikan variable data yang berisikan karakter "1"
void setup (void) {//fungsi setup hanya dijalankan sekali
  pinMode(button, INPUT_PULLUP); //mendeklarasikan button sebagai input dengan rangkaian pull up
  Serial.begin(115200); //untuk memulai komunikasi serial dengan Set baud rate 115200 untuk USART dan SPI
  digitalWrite(SS, HIGH); // mematikan Slave Select dengan memberikan logika HIGH
  SPI.begin (); // untuk memulai komunikasi SPI
  SPI.setClockDivider(SPI_CLOCK_DIV8); //divide the clock by 8
}

void loop (void) {//fungsi loop dijalankan berulang
  char c; // menginisialisasikan variabel C dengan tipe data char
  int nilai = digitalRead(button);
  if (nilai == 0) { //pembacaan variable nilai, logika 0 berarti button ditekan
    digitalWrite(SS, LOW); // menghidupkan Slave Select dengan memberikan logika LOW
    // send test string
    for (const char * p = "1" ; c = *p; p++)//perulangan for untuk mengirimkan variable p dengan isi "1", C diisi dengan variable alamat P dan ditransfer ke slave secara satu persatu karakter
    {
      SPI.transfer (c);
      Serial.print(c); // sebagai penghubung serial monitornya
    }
    SPI.transfer("1");
    digitalWrite(SS, HIGH); // disable Slave Select memberi logika HIGH
    delay(2000);
  }
}

SLAVE
//SLAVE

#include <SPI.h> //Deklarasi library SPI
#define buzzer 2 //menginisialisasikan variable buzzer pada pin 2


char buff [50]; // untuk menginisialisasikan variabel buff dg isi array 50
volatile byte indx;
volatile boolean process;

void setup (void) {
  Serial.begin (115200);// serial begin antara master dan slave harus sama
  pinMode(buzzer, OUTPUT); //memberi peran output pada buzzer (pin 2)
  SPCR |= _BV(SPE); // Menghidupkan komunikasi SPI untuk slave
  indx = 0; // buffer empty
  process = false;
  SPI.attachInterrupt(); // memulai pembacaan
}

ISR (SPI_STC_vect) // fungsi yg dijalankan ketika ada data yang masuk
  byte c = SPDR; // Membaca variable C dari Data Register dari slave
  if (indx < sizeof buff) { //jika indx kecil dari buff
    buff [indx++] = c; // Maka data disimpan pada indx selanjutnya dalam array buff
  }
  if (c == '1') { //ketika pembacaan variable c telah mencapai karakter 1, maka process=true
    process = true;
  }
}

void loop (void) {
  if (process) {//ketika process=true, program jalan
    digitalWrite(buzzer, HIGH);
    process = false; //untuk menghentikan process
    Serial.println (buff); //menampilkan pembacaan
    indx = 0; //reset button to zero
    delay(1000);
  }
  else //ketika process=false
  {
    digitalWrite(buzzer, LOW);
  }
}

5. Video   [ K E M B A L I]
6. Link Download   [ K E M B A L I]
a. Video

Tidak ada komentar:

Posting Komentar

Bahan Presentasi ini dibuat untuk Memenuhi Tugas Mata Kuliah Elektronika Oleh: MUHAMMAD FIQRA FUADDY 1910951027 Dosen Penga...