TP Modul 3


TUGAS PENDAHULUAN

[KEMBALI KE MENU SEBELUMNYA]





Kondisi yang digunakan pada Tugas Pendahuluan ini adalah Percobaan 2 kondisi 10 yaitu Ganti LED menjadi Buzzer

 2. Rangkaian Simulasi [Kembali]








 

MASTER
#include <SPI.h> //Deklarasi library SPI
#define button 2

void setup (void) {
  pinMode(button, INPUT_PULLUP);
  Serial.begin(115200 ); //untuk memulai serial dengan Set baud rate 115200 untuk USART dan SPI
  digitalWrite(SS, HIGH); // disable Slave Select
  SPI.begin (); // untuk memulai komunikasi SPI
  SPI.setClockDivider(SPI_CLOCK_DIV8); //divide the clock by 8
}
void loop (void) {
  char c; // menginisialisasikan variabel C dengan tipe data char
  int nilai=digitalRead(button);
  if(nilai==0){
   digitalWrite(SS, LOW); // enable Slave Select untuk menghidupkan dari slave dibuat low karena si slave akan hidup ketika diberi input low karena dari master berlogika HIGH supaya arus mengalir
  // send test string
  for (const char * p = "Hello, world!\r" ; c = *p; p++)
  {
    SPI.transfer (c);
    Serial.print(c); // sebagai penghubung serial monitornya
  }
  digitalWrite(SS, HIGH); // disable Slave Select menggunakan HIGH dikarenkan HIGH bertemu HIGH akan mati
  delay(2000);
  }
}

SLAVE
#include <SPI.h> //Deklarasi library SPI
#define buzzer 2 

char buff [50]; // untuk menginisialisasikan variabel buff pada spi.h tinggal tambahkan library 
volatile byte indx;// tidak ada koma
volatile boolean process;//  tidak ada koma dan boolean merupakan tipe data yang akan memilih

void setup (void) {

  Serial.begin (115200);// serial begin antara master dan slave harus sama
  pinMode(buzzer, OUTPUT); // have to send on master in so it set as output
  SPCR |= _BV(SPE); // turn on SPI in slave mode
  indx = 0; // buffer empty
  process = false;// Ketika dia masuk maka dia akan mati 
  SPI.attachInterrupt(); // turn on interrupt
}

ISR (SPI_STC_vect) // SPI interrupt routine // fungsi yg digunakan Ketika program sudah berjalan

{ // fungsi yg digunakan Ketika program sudah berjalan
  byte c = SPDR; // read byte from SPI Data Register from slave
  if (indx < sizeof buff) {  
    buff [indx++] = c; // save data in the next index in the array buff
    if (c == '\r') //check for the end of the word
      process = true;
  }
}
void loop (void) {
  if (process) {
    digitalWrite(buzzer, HIGH);
    process = false; //reset the process
    Serial.println (buff); //print the array on serial monitor
    indx = 0; //reset button to zero
    delay(1000);
  }
  else
  {
    digitalWrite(buzzer, LOW);
  }
}
5. Video [Kembali]




HTML - Download
Simulasi Proteus - download
Listing Program [MASTER] - download
Listing Program [SLAVE] - download
Video -  Download


No comments:

Post a Comment