1.Kondisi [kembali]
Ubah button menjadi saklar SPDT !
2. Gambar Rangkaian Simulasi [kembali]
Prinsip Kerja :
Rangkaian diatas merupakan rangkaian Serial Peripheral Interface (SPI) dimana prinsipnya sama dengan komunikasi UART yaitu memakai 2 buah arduino yang berfungsi sebagai master dan slave, hanya saja pada SPI memakai 3 jalur untuk mentransfer data yaitu MOSI, MISO dan SCLK. Pada rangkaian, pin 2 di arduino merupakan input, dimana terdapat resistor Pull Up untuk mengetahui nilai logika pada rangkaian. Pin 11,12,13 bertindak sebagai jalur, oleh karena itu LED dihubungkan pada Slave, karena nanti slave yang bertindak sebagai output. Switch SPDT dihubungkan pada master, karena switch akan bertindak sebagai input yaitu bekerja sebagai pemberi kondisi high dan low, jika dihubungkan ke pin 2 maka akan berkondisi high, jika tidak maka akan berkondisi low atau LED mati.
//MASTER
#include <SPI.h> //Deklarasi library SPI
void setup (void) {
Serial.begin(115200); //Set baud rate 115200
digitalWrite(SS, HIGH); // disable Slave Select
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV8); //divide the clock by 8
}
void loop (void) {
char c;
digitalWrite(SS, LOW); //enable Slave Select
// send test string
for (const char * p = "Hello, world!\r" ; c = *p; p++)
{
SPI.transfer (c);
Serial.print(c);
}
digitalWrite(SS, HIGH); // disable Slave Select
delay(2000);
}
//SLAVE
#include <SPI.h> char buff [50];
volatile byte indx;
volatile boolean process;
void setup (void) {
Serial.begin (115200);
pinMode(MISO, 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;
SPI.attachInterrupt(); // turn on interrupt
}
ISR (SPI_STC_vect) // SPI interrupt routine {
byte c = SPDR; // read byte from SPI Data Register
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) {
process = false; //reset the process
Serial.println (buff); //print the array on serial monitor
indx = 0; //reset button to zero }
}
#include <SPI.h> //Deklarasi library SPI
void setup (void) {
Serial.begin(115200); //Set baud rate 115200
digitalWrite(SS, HIGH); // disable Slave Select
SPI.begin ();
SPI.setClockDivider(SPI_CLOCK_DIV8); //divide the clock by 8
}
void loop (void) {
char c;
digitalWrite(SS, LOW); //enable Slave Select
// send test string
for (const char * p = "Hello, world!\r" ; c = *p; p++)
{
SPI.transfer (c);
Serial.print(c);
}
digitalWrite(SS, HIGH); // disable Slave Select
delay(2000);
}
//SLAVE
#include <SPI.h> char buff [50];
volatile byte indx;
volatile boolean process;
void setup (void) {
Serial.begin (115200);
pinMode(MISO, 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;
SPI.attachInterrupt(); // turn on interrupt
}
ISR (SPI_STC_vect) // SPI interrupt routine {
byte c = SPDR; // read byte from SPI Data Register
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) {
process = false; //reset the process
Serial.println (buff); //print the array on serial monitor
indx = 0; //reset button to zero }
}
6. Link Download [kembali]
Download Video disini
Download Rangkaian disini
Download Listing Program disini
Tidak ada komentar:
Posting Komentar