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