COMMUNICATION ARDUINO USING SPI
VIA ARDUINO
Salam elektro,pada postingan kali ini aruselektronika akan menghubungakan beberapa arduino dengan menggunakan jalur SPI (serial peripheral interface) (master & slave)
TOLONG BACA DENGAN DETAIL !
Siapkan alat dan bahan :
- Arduino Uno/Nano/Mega (sama saja)
- Kabel jumper disesuaikan
- Breadboard
- Kabel usb
- Laptop
- Software arduino ide
- Download library <LiquidCrystal.h> (tutorial instal library klik disini)
- Download simulation proteus
1. Sambungkan arduino dengan board arduino lainya
CATATAN !
a. Pastikan jalur SPI sudah benar
b. Jika ingin menggunakan lcd wiring juga lcd dengan benar
3. Verify program arduino,apabila tidak terjadi error lanjut dengan proses upload dengan cara upload program master terlebih dahulu ke arduino 1 kemudian upload program slave ke arduino 2,bila ingin ditambahkan lagi tinggal kalian buat lagi program untuk arduino slave 3 / arduino 3
4. Upload program,apabila succes akan muncul tulisan done uploading,apabila ada yang belum tahu bagaimana cara upload code/sketch ke board arduino bisa baca disini dan cara upload program arduino di software proteus baca disini
5. Sekarang kalian coba tekan push button pada board master,lihat apa yang akan di proses oleh board slave arduino
a. Pastikan jalur SPI sudah benar
b. Jika ingin menggunakan lcd wiring juga lcd dengan benar
2. Copy paste sketch/program di bawah ini ke dalam software arduino
Master Program
Slave Program
Master Program
void initSPI_Master() { DDRB |= (1<<2)|(1<<3)|(1<<5); // SCK, MOSI dan SS menjadi output DDRB &= ~(1<<4); // MISO menjadi input SPCR |= (1<<MSTR); // SPI sebagai master SPCR |= (1<<SPR0)|(1<<SPR1); // Pembagi clock = 128 SPCR |= (1<<SPE); // Aktifkan SPI } void setup() { initSPI_Master(); pinMode(2, INPUT); pinMode(3, INPUT); pinMode(4, INPUT); digitalWrite(2,HIGH); digitalWrite(3, HIGH); digitalWrite(4, HIGH); } void loop() { if(digitalRead(2)==LOW) { kirimData("Arus\r\n"); } else if(digitalRead(3)==LOW) { kirimData("Elektronika\r\n"); } else if(digitalRead(4)==LOW) { kirimData(".Blogspot.co.id\r\n"); } } void kirimData(char *string) { int panjangString = strlen(string); for(int i=0; i<panjangString; i++) { SPDR = string[i]; while(!(SPSR & (1<<SPIF))); delay(10); } }
#include <LiquidCrystal.h> LiquidCrystal lcd(5, 4, 3, 2, 1, 0); String dataString = ""; char data; void initSPI_Slave() { DDRB &= ~((1<<2)|(1<<3)|(1<<5)); // SCK, MOSI dan SS menjadi input DDRB |= (1<<4); // MISO menjadi output SPCR &= ~(1<<MSTR); // SPI sebagai slave SPCR |= (1<<SPR0)|(1<<SPR1); // Pembagi clock = 128 SPCR |= (1<<SPE); // Aktifkan SPI } void setup() { initSPI_Slave(); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0,0); lcd.print("SPI Slave Begin"); } void loop() { while(!(SPSR & (1<<SPIF))); // Tunggu data masuk data = SPDR; if(data!='\n') { if(data!='\r') { // Menyimpan isi register SPDR ke variabel data dataString += data; // Simpan data ke dalam string } } else { lcd.clear(); lcd.setCursor(0,0); lcd.print("Data Receive ==> "); lcd.setCursor(0,1); lcd.print(dataString); // Menampilkan string ke LCD dataString = ""; } }
4. Upload program,apabila succes akan muncul tulisan done uploading,apabila ada yang belum tahu bagaimana cara upload code/sketch ke board arduino bisa baca disini dan cara upload program arduino di software proteus baca disini
5. Sekarang kalian coba tekan push button pada board master,lihat apa yang akan di proses oleh board slave arduino
0 comments:
Posting Komentar