//====================================================================//
// Program Master - Slave Pengiriman Data Sensor //
// Dengan menggunakan Modul RS485 //
// (Untuk Arduino Slave-2) //
//====================================================================//
// RE=0 RE=0 RE=1 RE=1
// DE=0 DE=1 DE=0 DE=1
// Receive x Open Transmit
//---------------------------------------------------------------------
#define RE_main 7 //pin 7 sebagai RE utk bus RS485 Utama
#define DE_main 8 //pin 8 sebagai DE utk bus RS485 Utama
#define RE_sub 9 //pin 9 sebagai RE
#define DE_sub 10 //pin 10 sebagai DE
#define STX '2' //singkatan dari Start of Text
#define ETX 3 //singkatan dari End of Text
#define SOH '1' //singkatan dari Start of Heading
#define EOT 't' //singkatan dari End of Transmit
#define Addr 2 //set alamat Slave
#define Cmd 'r' //perintah read sensor
//---------------------------------------------------------------------
void rx_main() {digitalWrite(RE_main,LOW); digitalWrite(DE_main,LOW);}
void open_main(){digitalWrite(RE_main,HIGH);digitalWrite(DE_main,LOW);}
void tx_main(){digitalWrite(RE_main,HIGH);digitalWrite(DE_main,HIGH);}
void rx_sub() {digitalWrite(RE_sub,LOW); digitalWrite(DE_sub,LOW);}
void open_sub(){digitalWrite(RE_sub,HIGH);digitalWrite(DE_sub,LOW);}
void tx_sub(){digitalWrite(RE_main,HIGH);digitalWrite(DE_sub,HIGH);}
//---------------------------------------------------------------------
void setup() {
Serial.begin(9600); //set UART dg kecepatan 9600 bps
pinMode(RE_main, OUTPUT);//set pin 7 sebagai output
pinMode(DE_main, OUTPUT);//set pin 8 sebagai output
pinMode(RE_sub, OUTPUT); //set pin 7 sebagai output
pinMode(DE_sub, OUTPUT); //set pin 8 sebagai output
pinMode(A0, INPUT); //set pin A0 sebagai input
}
//---------------------------------------------------------------------
void loop() {
rx_main(); open_sub(); //receive pd bus utama, open pd Sub-bus
// A ------- membaca data dari Master yang ditujukan ke alamat “3”
if(Serial.available()) { //jika ada data eksekusi baris berikutnya
if(Serial.read()== STX) { //cek serial apakah STX ?
if(Serial.parseInt() == Addr) { //cek apakah ditujukan ke Addr=2 ?
if(Serial.read() == Cmd) { //cek apakah Cmd=r ?
if(Serial.parseInt() == ETX) { //cek apakah ETX ?
delay(5); //delay agar Master siap menerima data
tx_main(); open_sub(); //tx pd bus utama, open pd Sub-bus
Serial.print(SOH); //kirim SOH ke Master
Serial.print(Addr); //kirim alamat ke Master
Serial.print(analogRead(0)); //kirim data sensor ke Master
Serial.print(EOT); //kirim EOT ke Master
Serial.flush(); //tunggu hingga pengiriman selesai
return; //keluar dari blok-if pengecekan ETX
}
}
}
// B ------- blok jika alamat yang ditujukan ke alamat “3”
else {
if(Serial.read() == Cmd) { //cek apakah Cmd=r ?
if(Serial.parseInt() == ETX) { //cek apakah ETX ?
tx_sub(); open_main(); //tx pd Sub-bus, open pd bus utama
// C ------- kirim permintaan paket dari Slave-2 ke Slave-3
delay(10); //delay agar Slave-3 siap menerima data
Serial.print(STX); //kirim STX ke Sub-bus
Serial.print(3); //kirim Addr ke Sub-bus
Serial.print(Cmd); //kirim Cmd ke Sub-bus
Serial.print(ETX); //kirim ETX ke Sub-bus
Serial.flush(); //tunggu hingga pengiriman paket data selesai
rx_sub(); open_main(); //rx pd Sub-bus, open pd bus utama
// D ------- cek paket data dari Slave-3
while(Serial.available()) {//menunggu data serial dari Slave-3
if(Serial.read()==SOH) {//cek apakah SOH ?
if(Serial.find("2")) {//cek apakah alamat ditujukan ke “2”
int value=Serial.parseInt();//salin data VR3 dari Slave-3
if(Serial.read()==EOT) {//cek apakah EOT ?
// E -------------- kirim data VR3 dari Slave-3 ke Master
tx_main(); open_sub();
Serial.print(SOH); //kirim SOH ke Master
Serial.print(1); //kirim alamat ke Master
Serial.print(value);//kirim data VR3 ke Master
Serial.print(EOT); //kirim EOT ke Master
Serial.flush(); //tunggu hingga pengiriman selesai
return;
}
}
}
}
}
}
}
}
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5