LISTING PROGRAM MASTER
#include<SPI.h> //Library for SPI #define LEDku 7 #define spdtku 2 int spdtvalue; int x; void setup (void) { Serial.begin(115200); //Starts Serial Communication at Baud Rate 115200 pinMode(spdtku, INPUT); //Sets ipbutton sebagai input pinMode(LEDku, OUTPUT); //Sets led sebagai output SPI.begin(); //Begins the SPI commnuication SPI.setClockDivider(SPI_CLOCK_DIV8); //Sets clock for SPI communication at 8 (16/8=2Mhz) digitalWrite(SS, HIGH); // Setting SlaveSelect as HIGH (So master doesnt connnect with slave) } void loop(void) { byte Mastersend, Mastereceive; spdtvalue = digitalRead(spdtku); //Reads the status of the pin 2 if (spdtvalue == HIGH) //Logic for Setting x value (To be sent to slave) depending upon input from pin 2 { x = 1; } else { x = 0; } digitalWrite(SS, LOW); //Starts communication with Slave connected to master Mastersend = x; Mastereceive = SPI.transfer(Mastersend); //Send the mastersend value to slave also receives value from slave if (Mastereceive == 1) //Logic for setting the LED output depending upon value received from slave { digitalWrite(LEDku, HIGH); //Sets pin 7 HIGH Serial.println("Master LED ON"); } else { digitalWrite(LEDku, LOW); //Sets pin 7 LOW Serial.println("Master LED OFF"); } delay(100); }
Prinsip kerja dari master yaitu pertama tama include library untuk SPI, lalu deklarasikan pin 7 dan pin 2 masing masing untuk LED dan button, selanjutnya ada variable spdtvalue dan x dengan tipe data integer. Lalu ada fungsi void setup dimana pada fungsi ini semua kode akan dieksekusi sekali, lalu ada Serial.begin (115200) digunakan untuk mengatur kecepatan pengiriman data menggunakan port serial. Dalam fungsi void setup ini kita akan menetapkan atau mendeklarasikan pin 2(SPDT) sebagai input dan pin 7(LED) sebagai output. Lalu untuk memulai komunikasi SPI kita perlu menuliskan syntaks SPI.begin dan selanjutnya kita mengatur clockdivider untuk komunikasi SPI, disini kita menggunakan pembagi 8. Lalu kita mengatur SS (slave select) dalam logika HIGH sehingga master tidak akan terhubung dengan slave.
Selanjutnya ada fungsi void loop dimana pada fungsi ini semua kode akan dijalankan secara berulang, lalu dalam fungsi ini terdapat spdtvalue yang mana spdt akan membaca nilai yang terdapat pada pin 2. Lalu jika button mendeteksi nilai logika high maka x = 1 sedangkan jika terdeteksi nilai selain high maka nilai x = 0, selanjutnya untuk memulai komunikasi antara slave dan master kita perlu menuliskan syntaks digitalWrite (SS, LOW), Lalu ada syntaks Mastereceive =SPI.transfer(Mastersend) yang mana syntaks ini berguna untuk mengirimkan nilai SPDT yang disimpan dalam variable Mastersend ke slave arduino dan juga menerima nilai dari slave dan disimpan dalam variable Mastereceive. Selanjutnya kita akan mengatur LED dalam kondisi hidup atau mati. pada program ini jika mastereceive nilai nya 1 maka led akan menyala sedangkan jika mastereceive mendeteksi nilai selain 1 maka led tidak akan menyala.
LISTING PROGRAM SLAVE
#include<SPI.h> #define LEDku 7 #define spdtku 2 volatile boolean received; volatile byte Slavereceived, Slavesend; int spdtvalue; int x; void setup() { Serial.begin(115200); pinMode(spdtku, INPUT); // Setting pin 2 as INPUT pinMode(LEDku, OUTPUT); // Setting pin 7 as OUTPUT pinMode(MISO, OUTPUT); //Sets MISO as OUTPUT (Have to Send data to Master IN SPCR |= _BV(SPE); //Turn on SPI in Slave Mode received = false; SPI.attachInterrupt(); //Interuupt ON is set for SPI commnucation } ISR (SPI_STC_vect) //Inerrrput routine function { Slavereceived = SPDR; // Value received from master if store in variable slavereceived received = true; //Sets received as True } void loop() { if (received) //Logic to SET LED ON OR OFF depending upon the value recerived from master { if (Slavereceived == 1) { digitalWrite(LEDku, HIGH); //Sets pin 7 as HIGH LED ON Serial.println("Slave LED ON"); } else { digitalWrite(LEDku, LOW); //Sets pin 7 as LOW LED OFF Serial.println("Slave LED OFF"); } buttonvalue = digitalRead(spdtku); // Reads the status of the pin 2 if (spdtvalue == HIGH) //Logic to set the value of x to send to master { x = 1; } else { x = 0; } Slavesend = x; SPDR = Slavesend; //Sends the x value to master via SPDR delay(100); } }
Selanjutnya ada fungsi void loop dimana pada fungsi ini semua kode akan dijalankan secara berulang, lalu dalam fungsi ini kita akan mengatur led dalam kondisi hidup atau mati tergantung nilai yang diterima pada slave. Jika nilai yang diterima pada slave = 1 maka led akan menyala sedangkan jika nilai yang diterima selain 1 maka led akan mati. Selanjutnya button akan membaca nilai yang terdapat pada pin 2. Lalu jika button mendeteksi nilai logika high maka x = 1 sedangkan jika terdeteksi nilai selain high maka nilai x =0. Nilai x ini akan dikirimkan oleh slave ke master melalui spdr.
- Download File HTML klik disini
- Download Rangkaian Simulasi klik disini
- Download Listing Program Master klik disini
- Download Listing Program Slave klik disini
- Download Video Simulasi klik disini
- Download Datasheet Arduino Uno klik disini
- Download Datasheet Resistor klik disini
- Download Datasheet LED klik disini
- Download Datasheet SPDT klik disini
- Download Library Arduino UNO klik disini
No comments:
Post a Comment