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