1. Hardware [Kembali]
A. LED
B. Push Button
2. Rangkaian Simulasi [Kembali]
3. Flowchart [Kembali]
4. Listing Program [Kembali]
A. SPI Master
//
// Deklarasi library SPI
#include <SPI.h>
// Deklasrasi Button
#define BUTTON 2
// Data yang akan dikirimkan
uint8_t _data;
void setup (void) {
  // Konfigurasi button sebagai Input
  pinMode(BUTTON, INPUT);
  // Menonaktifkan Slave Select
  digitalWrite(SS, HIGH);
  // Memulai SPI Master
  SPI.begin ();
  // Mengatur pre-scaler clock
  SPI.setClockDivider(SPI_CLOCK_DIV8);
}
void loop (void) {
  if (digitalRead(BUTTON) == LOW) {
    _data = 1;
    // Mengaktifkan Slave
    digitalWrite(SS, LOW);
    // Mengirim data
    SPI.transfer(_data);
    // Menonaktifkan Slave
    digitalWrite(SS, HIGH);
  } else {
    _data = 0;
    // Mengaktifkan Slave
    digitalWrite(SS, LOW);
    // Mengirim data
    SPI.transfer(_data);
    // Menonaktifkan Slave
    digitalWrite(SS, HIGH);
  }
}
//
  
B. SPI Slave
//
// Menambahkan library SPI
#include <SPI.h>
// Deklarasi pin LED
#define LED 2
// Data yang diterima
uint8_t _data;
// Flag data sudah diproses
uint8_t proceed = true;
void setup (void) {
  // Konfigurasi LED sebagai OUTPUT
  pinMode(LED, OUTPUT);
  // Konfigurasi MISO sebagai output
  pinMode(MISO, OUTPUT);
  // Mengaktifkan SPI mode slave
  // SPCR = Serial Peripheral Control Register
  SPCR |= _BV(SPE);
  SPI.attachInterrupt(); // turn on interrupt
}
// SPI interrupt Routine
ISR (SPI_STC_vect) {
  // Membaca byte pada SPI Data Register
  _data = SPDR;
  proceed = false;
}
void loop (void) {
  // Mengecek apakah data belum diproses
  if (!proceed) {
    // Mengecek data
    if (_data == 1) {
      // LED menyala
      digitalWrite(LED, HIGH);
    } else if (_data == 0) {
      // LED padam
      digitalWrite(LED, LOW);
    }
    // Toggle Flag
    // Data sudah diproses
    proceed = true;
  }
}
//
 
 
 
 
 

 
 
0 komentar:
Posting Komentar